Skip to content

Commit bdd3fa8

Browse files
committed
Added file header token <REQUIRES_CODEGEN_VERSION>.
1 parent 4b44758 commit bdd3fa8

6 files changed

Lines changed: 28 additions & 2 deletions

File tree

CodeGenEngine/ErrorReporting.dbl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
import System
4646
import System.Collections.Generic
4747
import System.IO
48+
import System.Reflection
49+
import System.Diagnostics
4850

4951
.array 0
5052

@@ -162,6 +164,20 @@ namespace CodeGen.Engine
162164
currentFileNode = node
163165
Visit(node.Body)
164166

167+
;; Does the template require a specific version of CodeGen?
168+
if (node.RequiredCodeGenVersion != ^null)
169+
begin
170+
data codeGenVersion = Version.Parse(FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion)
171+
if (node.RequiredCodeGenVersion > codeGenVersion)
172+
begin
173+
;;Strip off the last component of the assembly version number
174+
data versionString = codeGenVersion.ToString().Substring(0,codeGenVersion.ToString().LastIndexOf("."))
175+
;;Display the error
176+
data message = String.Format("Template {0} requires a CodeGen {1} or higher. You are running version {2}.", node.Context.CurrentTemplateBaseName,node.RequiredCodeGenVersion.ToString(), versionString)
177+
Errors.Add(Tuple.Create(message, (int)0, (int)0, node.Context.CurrentTemplate))
178+
end
179+
end
180+
165181
;; Does anythng in the tree require repository structure processing?
166182
if ((node.RequiresRepository) && (node.Context.Structures.Count == 0))
167183
begin

CodeGenEngine/Parser.dbl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,14 @@ namespace CodeGen.Engine
193193
topLevelNode.ProvideFiles = new List<string>()
194194
topLevelNode.ProvideFiles.Add(tokens[ix + 1].Value)
195195
end
196+
("REQUIRES_CODEGEN_VERSION"),
197+
begin
198+
data requiredVersion, @Version
199+
if (Version.TryParse(tokens[ix + 1].Value.Trim(),requiredVersion)) then
200+
topLevelNode.RequiredCodeGenVersion = requiredVersion
201+
else
202+
reportParserError(errors, tkn, "Token <REQUIRES_CODEGEN_VERSION> contains an invalid version number value!")
203+
end
196204
("REQUIRES_OPTION"),
197205
begin
198206
if (topLevelNode.RequiredOptions == ^null)

CodeGenEngine/Tokenizer.dbl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,12 @@ namespace CodeGen.Engine
115115
&
116116
& { new TokenMeta() {Name = "CODEGEN_FILENAME", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
117117
& { new TokenMeta() {Name = "CODEGEN_FOLDER", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
118+
& { new TokenMeta() {Name = "OPTIONAL_USERTOKEN", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
118119
& { new TokenMeta() {Name = "PROCESS_TEMPLATE", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
119120
& { new TokenMeta() {Name = "PROVIDE_FILE", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
120-
& { new TokenMeta() {Name = "REQUIRES_USERTOKEN", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
121-
& { new TokenMeta() {Name = "OPTIONAL_USERTOKEN", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
121+
& { new TokenMeta() {Name = "REQUIRES_CODEGEN_VERSION", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
122122
& { new TokenMeta() {Name = "REQUIRES_OPTION", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
123+
& { new TokenMeta() {Name = "REQUIRES_USERTOKEN", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
123124
&
124125
& { new TokenMeta() {Name = "REQUIRES_CUSTOM_BUTTON_EXPRESSION", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },
125126
& { new TokenMeta() {Name = "REQUIRES_CUSTOM_BUTTON_TOKEN", TypeOfToken = TokenType.FileHeader, IsPaired = true, Validity = TokenValidity.Anywhere} },

CodeGenEngine/TreeNodes.dbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ namespace CodeGen.Engine
260260
public ProvideFiles, @List<string>
261261
public RequiresRepository, boolean, false
262262
public RequiresNamespace, boolean, false
263+
public RequiredCodeGenVersion, @Version
263264

264265
;; Taskset level code generation data
265266
public Context, @CodeGenContext

Documentation/CodeGen.chm

84 Bytes
Binary file not shown.

Documentation/CodeGen.hsm

6.54 KB
Binary file not shown.

0 commit comments

Comments
 (0)