public override SyntaxNode VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node) { if (node.Declaration.Variables.Count == 1) { IDSLHandler dsl = null; dsl = ctx_.CreateDSL(node.Declaration.Type.ToString()); if (dsl != null) { if (node.Declaration.Variables.Count != 1) { //td: error return(node); } var variable = node.Declaration.Variables[0]; DSLContext dctx = new DSLContext { MainNode = variable, Surroundings = DSLSurroundings.Code, Assign = false, ExtraMembers = members_ }; Debug.Assert(pending_ == null); pending_ = new ResolveDSLCode(dsl, ctx_, dctx); return(dsl.compile(ctx_, dctx)); } } return(base.VisitLocalDeclarationStatement(node)); }
public string RegisterDSL(IDSLHandler dsl) { int hash = dsl.GetHashCode(); Debug.Assert(!_dslInstances.ContainsKey(hash)); _dslInstances[hash] = dsl; return(hash.ToString()); }
public override SyntaxNode VisitIncompleteMember(IncompleteMemberSyntax node) { string typename = node.Type.ToString(); IDSLHandler dsl = ctx_.CreateDSL(typename); if (dsl != null) { pending_ = new ResolveDSLClass(dsl, ctx_, members_); return(null); } return(node); }
public override SyntaxNode VisitMethodDeclaration(MethodDeclarationSyntax node) { //handle language constructs string typeName = node.ReturnType.ToString(); switch (typeName) { case "on": return(rewriteEventHandler(node)); case "function": return(rewriteFunction(node, false)); case "method": return(rewriteFunction(node, true)); case "typedef": return(rewriteTypedef(node)); case "": { switch (node.Identifier.ToString()) { case "constructor": return(rewriteConstructor(node)); } break; } } //handle dsls IDSLHandler dsl = null; DSLSurroundings ds = node.Parent is CompilationUnitSyntax ? DSLSurroundings.Global : DSLSurroundings.TypeBody; string id = null; if (!node.ReturnType.IsMissing) { dsl = ctx_.CreateDSL(typeName); id = node.Identifier.ToString(); } else { dsl = ctx_.CreateDSL(node.Identifier.ToString()); } if (dsl != null) { DSLContext dctx = new DSLContext { MainNode = node, Surroundings = ds, Id = id, ExtraMembers = members_ }; return(dsl.compile(ctx_, dctx)); } return(node.WithBody((BlockSyntax)base.Visit(node.Body))); }
public SyntaxNode Link(SyntaxNode node, SyntaxNode newNode, string linker, SemanticModel model) { if (linkers_.ContainsKey(linker)) { return(linkers_[linker](this, node, newNode, model)); } IDSLHandler dsl = GetDSL(linker); if (dsl != null) { return(dsl.link(this, node, model)); } return(node); }
private SyntaxNode rewriteInvocation(InvocationExpressionSyntax node, bool assign) { IDSLHandler dsl = ctx_.CreateDSL(node.Expression.ToString()); if (dsl != null) { DSLContext dctx = new DSLContext { MainNode = node, Surroundings = DSLSurroundings.Code, Assign = assign, ExtraMembers = members_ }; Debug.Assert(pending_ == null); pending_ = new ResolveDSLCode(dsl, ctx_, dctx); return(dsl.compile(ctx_, dctx)); } else if (node.ArgumentList.GetDiagnostics().Any()) { return(SyntaxFactory.InvocationExpression(node.Expression, (ArgumentListSyntax)Visit(node.ArgumentList))); } return(node); }
public ResolveDSLCode(IDSLHandler dsl, ExcessContext ctx, DSLContext dctx) { dsl_ = dsl; ctx_ = ctx; dctx_ = dctx; }
public ResolveDSLClass(IDSLHandler dsl, ExcessContext ctx, List <MemberDeclarationSyntax> extraMembers) { dsl_ = dsl; ctx_ = ctx; extraMembers_ = extraMembers; }
public ResolveDSLClass(IDSLHandler dsl, ExcessContext ctx, List<MemberDeclarationSyntax> extraMembers) { dsl_ = dsl; ctx_ = ctx; extraMembers_ = extraMembers; }