From eb46a1a7004ed4d83101f7de3d6bc764ce99dc5d Mon Sep 17 00:00:00 2001 From: Tofik Sonono Date: Thu, 22 Aug 2024 09:33:00 +0200 Subject: [PATCH] Added The Device Modeling Language (DML) --- .gitmodules | 3 + grammars.yml | 2 + lib/linguist/heuristics.yml | 4 + lib/linguist/languages.yml | 10 + .../sample-device.dml | 73 ++++++ .../sample-interface.dml | 11 + vendor/grammars/device-modeling-language | 1 + .../device-modeling-language.dep.yml | 210 ++++++++++++++++++ 8 files changed, 314 insertions(+) create mode 100644 samples/Device Modeling Language/sample-device.dml create mode 100644 samples/Device Modeling Language/sample-interface.dml create mode 160000 vendor/grammars/device-modeling-language create mode 100644 vendor/licenses/git_submodule/device-modeling-language.dep.yml diff --git a/.gitmodules b/.gitmodules index 05a2491880..c264fafbf2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -431,6 +431,9 @@ [submodule "vendor/grammars/desktop.tmbundle"] path = vendor/grammars/desktop.tmbundle url = https://github.com/Mailaender/desktop.tmbundle.git +[submodule "vendor/grammars/device-modeling-language"] + path = vendor/grammars/device-modeling-language + url = https://github.com/intel/device-modeling-language.git [submodule "vendor/grammars/diff.tmbundle"] path = vendor/grammars/diff.tmbundle url = https://github.com/textmate/diff.tmbundle diff --git a/grammars.yml b/grammars.yml index 23c95ad2f7..c4772ff7a8 100644 --- a/grammars.yml +++ b/grammars.yml @@ -350,6 +350,8 @@ vendor/grammars/denizenscript-grammar: - source.denizenscript vendor/grammars/desktop.tmbundle: - source.desktop +vendor/grammars/device-modeling-language: +- source.dml vendor/grammars/diff.tmbundle: - source.diff vendor/grammars/dm-syntax: diff --git a/lib/linguist/heuristics.yml b/lib/linguist/heuristics.yml index 8a6fcea078..985178ae2f 100644 --- a/lib/linguist/heuristics.yml +++ b/lib/linguist/heuristics.yml @@ -195,6 +195,10 @@ disambiguations: # : dependency # path/file.ext1 : some/path/../file.ext2 pattern: '([\/\\].*:\s+.*\s\\$|: \\$|^[ %]:|^[\w\s\/\\.]+\w+\.\w+\s*:\s+[\w\s\/\\.]+\w+\.\w+)' +- extensions: ['.dml'] + rules: + - language: Device Modeling Language + pattern: '(^dml\s1.4;)' - extensions: ['.dsp'] rules: - language: Microsoft Developer Studio Project diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index aae547bd83..42eb4b2480 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1581,6 +1581,16 @@ DirectX 3D File: ace_mode: text tm_scope: none language_id: 201049282 +Device Modeling Language: + type: programming + aliases: + - DML + extensions: + - ".dml" + ace_mode: text + color: "#0068B5" + tm_scope: source.dml + language_id: 806438883 Dockerfile: type: programming aliases: diff --git a/samples/Device Modeling Language/sample-device.dml b/samples/Device Modeling Language/sample-device.dml new file mode 100644 index 0000000000..c0262a9d2f --- /dev/null +++ b/samples/Device Modeling Language/sample-device.dml @@ -0,0 +1,73 @@ +dml 1.4; + +device sample_device; + +param desc = "A sample DML device"; + +param documentation = "This is a sample DML device intended as a sample for" + + " the Linguist project"; + +import "sample-interface.dml"; + +attribute n_regs_written is (pseudo_attr, uint64_attr) "" { + method get() -> (attr_value_t) { + local uint8 n_written_regs = 0; + foreach reg in (each register_written in (regs)) { + if (reg.has_been_written()) + n_written_regs += 1; + } + return SIM_make_attr_uint64(n_written_regs); + } + + method set(attr_value_t val) throws { + if (SIM_attr_integer(val) != 0) { + log error: "n_regs_written can be only set to 0 to reset written" + + " status on all registers in the 'regs' bank"; + throw; + } + + foreach reg in (each register_written in (regs)) { + reg.reset_written(); + } + } +} + +implement sample { + saved int arg_sum = 0; + method simple_method(int arg) { + arg_sum += arg; + } +} + +template register_written is (register, write) { + saved bool written; + + method write(uint64 value) default { + this.written = true; + default(value); + } + + shared method has_been_written() -> (bool) { + return this.written; + } + + shared method reset_written() { + this.written = false; + } +} + +bank regs { + param desc = dev.desc + "custom desc"; + register r1 size 4 @ 0x0000 is (read, register_written) { + method read() -> (uint64) { + log info, 3: "read from r1"; + return 42 + sample.arg_sum; + } + } + register r2 size 4 @ 0x0004 is (write, register_written) { + method write(uint64 value) { + log info, 3: "wrote %d to r2", value; + default(value); + } + } +} diff --git a/samples/Device Modeling Language/sample-interface.dml b/samples/Device Modeling Language/sample-interface.dml new file mode 100644 index 0000000000..196ceff976 --- /dev/null +++ b/samples/Device Modeling Language/sample-interface.dml @@ -0,0 +1,11 @@ +dml 1.4; + +header %{ +typedef struct { + void (*simple_method)(conf_object_t *obj, int arg); +} sample_interface_t; +%} + +extern typedef struct { + void (*simple_method)(conf_object_t *obj, int arg); +} sample_interface_t; diff --git a/vendor/grammars/device-modeling-language b/vendor/grammars/device-modeling-language new file mode 160000 index 0000000000..d6a6b4b601 --- /dev/null +++ b/vendor/grammars/device-modeling-language @@ -0,0 +1 @@ +Subproject commit d6a6b4b601b15a0627d634d353c77d08814c332e diff --git a/vendor/licenses/git_submodule/device-modeling-language.dep.yml b/vendor/licenses/git_submodule/device-modeling-language.dep.yml new file mode 100644 index 0000000000..370cfd00de --- /dev/null +++ b/vendor/licenses/git_submodule/device-modeling-language.dep.yml @@ -0,0 +1,210 @@ +--- +name: device-modeling-language +version: d6a6b4b601b15a0627d634d353c77d08814c332e +type: git_submodule +homepage: https://github.com/intel/device-modeling-language.git +license: mpl-2.0 +licenses: +- sources: LICENSE + text: "SPDX-License-Identifier: MPL-2.0\n\nMozilla Public License Version 2.0\n==================================\n\n1. + Definitions\n--------------\n\n1.1. \"Contributor\"\n means each individual + or legal entity that creates, contributes to\n the creation of, or owns Covered + Software.\n\n1.2. \"Contributor Version\"\n means the combination of the Contributions + of others (if any) used\n by a Contributor and that particular Contributor's + Contribution.\n\n1.3. \"Contribution\"\n means Covered Software of a particular + Contributor.\n\n1.4. \"Covered Software\"\n means Source Code Form to which + the initial Contributor has attached\n the notice in Exhibit A, the Executable + Form of such Source Code\n Form, and Modifications of such Source Code Form, + in each case\n including portions thereof.\n\n1.5. \"Incompatible With Secondary + Licenses\"\n means\n\n (a) that the initial Contributor has attached the + notice described\n in Exhibit B to the Covered Software; or\n\n (b) + that the Covered Software was made available under the terms of\n version + 1.1 or earlier of the License, but not also under the\n terms of a Secondary + License.\n\n1.6. \"Executable Form\"\n means any form of the work other than + Source Code Form.\n\n1.7. \"Larger Work\"\n means a work that combines Covered + Software with other material, in \n a separate file or files, that is not Covered + Software.\n\n1.8. \"License\"\n means this document.\n\n1.9. \"Licensable\"\n + \ means having the right to grant, to the maximum extent possible,\n whether + at the time of the initial grant or subsequently, any and\n all of the rights + conveyed by this License.\n\n1.10. \"Modifications\"\n means any of the following:\n\n + \ (a) any file in Source Code Form that results from an addition to,\n deletion + from, or modification of the contents of Covered\n Software; or\n\n (b) + any new file in Source Code Form that contains any Covered\n Software.\n\n1.11. + \"Patent Claims\" of a Contributor\n means any patent claim(s), including without + limitation, method,\n process, and apparatus claims, in any patent Licensable + by such\n Contributor that would be infringed, but for the grant of the\n License, + by the making, using, selling, offering for sale, having\n made, import, or + transfer of either its Contributions or its\n Contributor Version.\n\n1.12. + \"Secondary License\"\n means either the GNU General Public License, Version + 2.0, the GNU\n Lesser General Public License, Version 2.1, the GNU Affero General\n + \ Public License, Version 3.0, or any later versions of those\n licenses.\n\n1.13. + \"Source Code Form\"\n means the form of the work preferred for making modifications.\n\n1.14. + \"You\" (or \"Your\")\n means an individual or a legal entity exercising rights + under this\n License. For legal entities, \"You\" includes any entity that\n + \ controls, is controlled by, or is under common control with You. For\n purposes + of this definition, \"control\" means (a) the power, direct\n or indirect, + to cause the direction or management of such entity,\n whether by contract + or otherwise, or (b) ownership of more than\n fifty percent (50%) of the outstanding + shares or beneficial\n ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. + Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive + license:\n\n(a) under intellectual property rights (other than patent or trademark)\n + \ Licensable by such Contributor to use, reproduce, make available,\n modify, + display, perform, distribute, and otherwise exploit its\n Contributions, either + on an unmodified basis, with Modifications, or\n as part of a Larger Work; + and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n + \ for sale, have made, import, and otherwise transfer either its\n Contributions + or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in + Section 2.1 with respect to any Contribution\nbecome effective for each Contribution + on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations + on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted + under\nthis License. No additional rights or licenses will be implied from the\ndistribution + or licensing of Covered Software under this License.\nNotwithstanding Section + 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code + that a Contributor has removed from Covered Software;\n or\n\n(b) for infringements + caused by: (i) Your and any other third party's\n modifications of Covered + Software, or (ii) the combination of its\n Contributions with other software + (except as part of its Contributor\n Version); or\n\n(c) under Patent Claims + infringed by Covered Software in the absence of\n its Contributions.\n\nThis + License does not grant any rights in the trademarks, service marks,\nor logos + of any Contributor (except as may be necessary to comply with\nthe notice requirements + in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional + grants as a result of Your choice to\ndistribute the Covered Software under a + subsequent version of this\nLicense (see Section 10.2) or under the terms of a + Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach + Contributor represents that the Contributor believes its\nContributions are its + original creation(s) or it has sufficient rights\nto grant the rights to its Contributions + conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to + limit any rights You have under\napplicable copyright doctrines of fair use, fair + dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, + and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. + Distribution of Source Form\n\nAll distribution of Covered Software in Source + Code Form, including any\nModifications that You create or to which You contribute, + must be under\nthe terms of this License. You must inform recipients that the + Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, + and how they can obtain a copy of this License. You may not\nattempt to alter + or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution + of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) + such Covered Software must also be made available in Source Code\n Form, as + described in Section 3.1, and You must inform recipients of\n the Executable + Form how they can obtain a copy of such Source Code\n Form by reasonable means + in a timely manner, at a charge no more\n than the cost of distribution to + the recipient; and\n\n(b) You may distribute such Executable Form under the terms + of this\n License, or sublicense it under different terms, provided that the\n + \ license for the Executable Form does not attempt to limit or alter\n the + recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution + of a Larger Work\n\nYou may create and distribute a Larger Work under terms of + Your choice,\nprovided that You also comply with the requirements of this License + for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware + with a work governed by one or more Secondary Licenses, and the\nCovered Software + is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally + distribute such Covered Software\nunder the terms of such Secondary License(s), + so that the recipient of\nthe Larger Work may, at their option, further distribute + the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. + Notices\n\nYou may not remove or alter the substance of any license notices\n(including + copyright notices, patent notices, disclaimers of warranty,\nor limitations of + liability) contained within the Source Code Form of\nthe Covered Software, except + that You may alter any license notices to\nthe extent required to remedy known + factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose + to offer, and to charge a fee for, warranty, support,\nindemnity or liability + obligations to one or more recipients of Covered\nSoftware. However, You may do + so only on Your own behalf, and not on\nbehalf of any Contributor. You must make + it absolutely clear that any\nsuch warranty, support, indemnity, or liability + obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor + for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity + or liability terms You offer. You may include additional\ndisclaimers of warranty + and limitations of liability specific to any\njurisdiction.\n\n4. Inability to + Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf + it is impossible for You to comply with any of the terms of this\nLicense with + respect to some or all of the Covered Software due to\nstatute, judicial order, + or regulation then You must: (a) comply with\nthe terms of this License to the + maximum extent possible; and (b)\ndescribe the limitations and the code they affect. + Such description must\nbe placed in a text file included with all distributions + of the Covered\nSoftware under this License. Except to the extent prohibited by + statute\nor regulation, such description must be sufficiently detailed for a\nrecipient + of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. + The rights granted under this License will terminate automatically\nif You fail + to comply with any of its terms. However, if You become\ncompliant, then the rights + granted under this License from a particular\nContributor are reinstated (a) provisionally, + unless and until such\nContributor explicitly and finally terminates Your grants, + and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance + by some reasonable means prior to 60 days after You have\ncome back into compliance. + Moreover, Your grants from a particular\nContributor are reinstated on an ongoing + basis if such Contributor\nnotifies You of the non-compliance by some reasonable + means, this is the\nfirst time You have received notice of non-compliance with + this License\nfrom such Contributor, and You become compliant prior to 30 days + after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against + any entity by asserting a patent\ninfringement claim (excluding declaratory judgment + actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly + or indirectly infringes any patent, then the rights granted to\nYou by any and + all Contributors for the Covered Software under Section\n2.1 of this License shall + terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, + all\nend user license agreements (excluding distributors and resellers) which\nhave + been validly granted by You or Your distributors under this License\nprior to + termination shall survive termination.\n\n************************************************************************\n* + \ *\n* 6. + Disclaimer of Warranty *\n* ------------------------- + \ *\n* *\n* + \ Covered Software is provided under this License on an \"as is\" *\n* basis, + without warranty of any kind, either expressed, implied, or *\n* statutory, + including, without limitation, warranties that the *\n* Covered Software + is free of defects, merchantable, fit for a *\n* particular purpose or + non-infringing. The entire risk as to the *\n* quality and performance of + the Covered Software is with You. *\n* Should any Covered Software prove + defective in any respect, You *\n* (not any Contributor) assume the cost + of any necessary servicing, *\n* repair, or correction. This disclaimer of + warranty constitutes an *\n* essential part of this License. No use of any + Covered Software is *\n* authorized under this License except under this disclaimer. + \ *\n* *\n************************************************************************\n\n************************************************************************\n* + \ *\n* 7. + Limitation of Liability *\n* -------------------------- + \ *\n* *\n* + \ Under no circumstances and under no legal theory, whether tort *\n* (including + negligence), contract, or otherwise, shall any *\n* Contributor, or + anyone who distributes Covered Software as *\n* permitted above, be + liable to You for any direct, indirect, *\n* special, incidental, or + consequential damages of any character *\n* including, without limitation, + damages for lost profits, loss of *\n* goodwill, work stoppage, computer failure + or malfunction, or any *\n* and all other commercial damages or losses, even + if such party *\n* shall have been informed of the possibility of such damages. + This *\n* limitation of liability shall not apply to liability for death or + \ *\n* personal injury resulting from such party's negligence to the *\n* + \ extent applicable law prohibits such limitation. Some *\n* jurisdictions + do not allow the exclusion or limitation of *\n* incidental or consequential + damages, so this exclusion and *\n* limitation may not apply to You. + \ *\n* *\n************************************************************************\n\n8. + Litigation\n-------------\n\nAny litigation relating to this License may be brought + only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace + of business and such litigation shall be governed by laws of that\njurisdiction, + without reference to its conflict-of-law provisions.\nNothing in this Section + shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. + Miscellaneous\n----------------\n\nThis License represents the complete agreement + concerning the subject\nmatter hereof. If any provision of this License is held + to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary + to make it enforceable. Any law or regulation which provides\nthat the language + of a contract shall be construed against the drafter\nshall not be used to construe + this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. + New Versions\n\nMozilla Foundation is the license steward. Except as provided + in Section\n10.3, no one other than the license steward has the right to modify + or\npublish new versions of this License. Each version will be given a\ndistinguishing + version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered + Software under the terms of the version\nof the License under which You originally + received the Covered Software,\nor under the terms of any subsequent version published + by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software + not governed by this License, and you want to\ncreate a new license for such software, + you may create and use a\nmodified version of this License if you rename the license + and remove\nany references to the name of the license steward (except to note + that\nsuch modified license differs from this License).\n\n10.4. Distributing + Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose + to distribute Source Code Form that is Incompatible With\nSecondary Licenses under + the terms of this version of the License, the\nnotice described in Exhibit B of + this License must be attached.\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n + \ This Source Code Form is subject to the terms of the Mozilla Public\n License, + v. 2.0. If a copy of the MPL was not distributed with this\n file, You can obtain + one at https://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to + put the notice in a particular\nfile, then You may include the notice in a location + (such as a LICENSE\nfile in a relevant directory) where a recipient would be likely + to look\nfor such a notice.\n\nYou may add additional accurate notices of copyright + ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n + \ This Source Code Form is \"Incompatible With Secondary Licenses\", as\n defined + by the Mozilla Public License, v. 2.0.\n" +notices: []