本文整理汇总了C#中ProtoCore.AST.Node类的典型用法代码示例。如果您正苦于以下问题:C# Node类的具体用法?C# Node怎么用?C# Node使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Node类属于ProtoCore.AST命名空间,在下文中一共展示了Node类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: EmitDoubleNode
protected void EmitDoubleNode(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false, ProtoCore.DSASM.AssociativeSubCompilePass subPass = ProtoCore.DSASM.AssociativeSubCompilePass.kNone)
{
if (subPass == ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier)
{
return;
}
dynamic dNode = node;
if (!enforceTypeCheck || compileState.TypeSystem.IsHigherRank((int)PrimitiveType.kTypeDouble, inferedType.UID))
{
inferedType.UID = (int)PrimitiveType.kTypeDouble;
}
inferedType.UID = isBooleanOp ? (int)PrimitiveType.kTypeBool : inferedType.UID;
}
示例2: EmitIdentifierListNode
protected void EmitIdentifierListNode(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false,
ProtoCore.AssociativeGraph.GraphNode graphNode = null,
ProtoCore.CompilerDefinitions.Associative.SubCompilePass subPass = ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kNone,
ProtoCore.AST.Node bnode = null)
{
if (subPass == ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kUnboundIdentifier)
{
//to process all unbounded parameters if any
dynamic iNode = node;
while (iNode is ProtoCore.AST.AssociativeAST.IdentifierListNode || iNode is ProtoCore.AST.ImperativeAST.IdentifierListNode)
{
dynamic rightNode = iNode.RightNode;
if (rightNode is ProtoCore.AST.AssociativeAST.FunctionCallNode || rightNode is ProtoCore.AST.ImperativeAST.FunctionCallNode)
{
foreach (dynamic paramNode in rightNode.FormalArguments)
{
ProtoCore.Type paramType = TypeSystem.BuildPrimitiveTypeObject(PrimitiveType.kTypeVar, 0);
DfsTraverse(paramNode, ref paramType, false, graphNode, ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kUnboundIdentifier);
}
}
iNode = iNode.LeftNode;
}
return;
}
int depth = 0;
ProtoCore.Type leftType = TypeSystem.BuildPrimitiveTypeObject(PrimitiveType.kInvalidType, 0);
bool isFirstIdent = true;
BuildSSADependency(node, graphNode);
if (core.Options.GenerateSSA)
{
BuildRealDependencyForIdentList(graphNode);
if (node is ProtoCore.AST.AssociativeAST.IdentifierListNode)
{
if ((node as ProtoCore.AST.AssociativeAST.IdentifierListNode).IsLastSSAIdentListFactor)
{
Validity.Assert(null != ssaPointerStack);
ssaPointerStack.Pop();
}
}
}
bool isCollapsed;
EmitGetterSetterForIdentList(node, ref inferedType, graphNode, subPass, out isCollapsed);
if (!isCollapsed)
{
bool isMethodCallPresent = false;
ProtoCore.DSASM.SymbolNode firstSymbol = null;
bool isIdentReference = DfsEmitIdentList(node, null, globalClassIndex, ref leftType, ref depth, ref inferedType, false, ref isFirstIdent, ref isMethodCallPresent, ref firstSymbol, graphNode, subPass, bnode);
inferedType.UID = isBooleanOp ? (int)PrimitiveType.kTypeBool : inferedType.UID;
if (isIdentReference && depth > 1)
{
EmitInstrConsole(ProtoCore.DSASM.kw.pushlist, depth.ToString(), globalClassIndex.ToString());
// TODO Jun: Get blockid
int blockId = 0;
EmitPushList(depth, globalClassIndex, blockId);
}
}
}
示例3: DFSGetSymbolList_Simple
// Deperecate this function after further regression testing and just use DFSGetSymbolList
public void DFSGetSymbolList_Simple(Node pNode, ref ProtoCore.Type lefttype, ref int functionindex, ProtoCore.AssociativeGraph.UpdateNodeRef nodeRef)
{
dynamic node = pNode;
if (node is ProtoCore.AST.ImperativeAST.IdentifierListNode || node is ProtoCore.AST.AssociativeAST.IdentifierListNode)
{
dynamic bnode = node;
DFSGetSymbolList_Simple(bnode.LeftNode, ref lefttype, ref functionindex, nodeRef);
node = bnode.RightNode;
}
if (node is ProtoCore.AST.ImperativeAST.IdentifierNode || node is ProtoCore.AST.AssociativeAST.IdentifierNode)
{
dynamic identnode = node;
ProtoCore.DSASM.SymbolNode symbolnode = null;
bool isAccessible = false;
bool isAllocated = VerifyAllocation(identnode.Value, lefttype.UID, functionindex, out symbolnode, out isAccessible);
if (isAllocated)
{
if (null == symbolnode)
{
// It is inaccessible from here due to access modifier.
// Just attempt to retrieve the symbol
int symindex = core.ClassTable.ClassNodes[lefttype.UID].GetFirstVisibleSymbolNoAccessCheck(identnode.Value);
if (ProtoCore.DSASM.Constants.kInvalidIndex != symindex)
{
symbolnode = core.ClassTable.ClassNodes[lefttype.UID].Symbols.symbolList[symindex];
}
}
// Since the variable was found, all succeeding nodes in the ident list are class members
// Class members have a function scope of kGlobalScope as they are only local to the class, not with any member function
functionindex = ProtoCore.DSASM.Constants.kGlobalScope;
lefttype = symbolnode.datatype;
ProtoCore.AssociativeGraph.UpdateNode updateNode = new AssociativeGraph.UpdateNode();
updateNode.symbol = symbolnode;
updateNode.nodeType = ProtoCore.AssociativeGraph.UpdateNodeType.kSymbol;
nodeRef.PushUpdateNode(updateNode);
}
else
{
// Is it a class?
int ci = core.ClassTable.IndexOf(identnode.Value);
if (ProtoCore.DSASM.Constants.kInvalidIndex != ci)
{
lefttype.UID = ci;
// Comment Jun:
// Create a symbol node that contains information about the class type that contains static properties
ProtoCore.DSASM.SymbolNode classSymbol = new DSASM.SymbolNode();
classSymbol.memregion = DSASM.MemoryRegion.kMemStatic;
classSymbol.name = identnode.Value;
classSymbol.classScope = ci;
ProtoCore.AssociativeGraph.UpdateNode updateNode = new AssociativeGraph.UpdateNode();
updateNode.symbol = classSymbol;
updateNode.nodeType = ProtoCore.AssociativeGraph.UpdateNodeType.kSymbol;
nodeRef.PushUpdateNode(updateNode);
}
else
{
// In this case, the lhs type is undefined
// Just attempt to create a symbol node
string ident = identnode.Value;
if (0 != ident.CompareTo(ProtoCore.DSDefinitions.Keyword.This))
{
symbolnode = new SymbolNode();
symbolnode.name = identnode.Value;
ProtoCore.AssociativeGraph.UpdateNode updateNode = new AssociativeGraph.UpdateNode();
updateNode.symbol = symbolnode;
updateNode.nodeType = AssociativeGraph.UpdateNodeType.kSymbol;
nodeRef.PushUpdateNode(updateNode);
}
}
}
}
else if (node is ProtoCore.AST.ImperativeAST.FunctionCallNode || node is ProtoCore.AST.AssociativeAST.FunctionCallNode)
{
string functionName = node.Function.Value;
if (ProtoCore.Utils.CoreUtils.IsGetterSetter(functionName))
{
string property;
if (CoreUtils.TryGetPropertyName(functionName, out property))
{
functionName = property;
}
ProtoCore.DSASM.SymbolNode symbolnode = null;
bool isAccessible = false;
bool isAllocated = VerifyAllocation(functionName, lefttype.UID, globalProcIndex, out symbolnode, out isAccessible);
if (isAllocated)
{
if (null == symbolnode)
//.........这里部分代码省略.........
示例4: EmitNullNode
protected void EmitNullNode(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false, ProtoCore.CompilerDefinitions.Associative.SubCompilePass subPass = ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kNone)
{
if (subPass == ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kUnboundIdentifier)
{
return;
}
dynamic nullNode = node;
inferedType.UID = (int)PrimitiveType.kTypeNull;
inferedType.UID = isBooleanOp ? (int)PrimitiveType.kTypeBool : inferedType.UID;
if (core.Options.TempReplicationGuideEmptyFlag)
{
if (emitReplicationGuide)
{
int replicationGuides = 0;
// Push the number of guides
EmitInstrConsole(ProtoCore.DSASM.kw.push, replicationGuides + "[guide]");
StackValue opNumGuides = StackValue.BuildReplicationGuide(replicationGuides);
EmitPush(opNumGuides);
}
}
StackValue op = StackValue.Null;
if (core.Options.TempReplicationGuideEmptyFlag && emitReplicationGuide)
{
EmitInstrConsole(ProtoCore.DSASM.kw.pushg, ProtoCore.DSASM.Literal.Null);
EmitPushG(op, nullNode.line, nullNode.col);
}
else
{
EmitInstrConsole(ProtoCore.DSASM.kw.push, ProtoCore.DSASM.Literal.Null);
EmitPush(op, nullNode.line, nullNode.col);
}
}
示例5: EmitReturnStatement
protected void EmitReturnStatement(Node node, Type inferedType)
{
// Check the returned type against the declared return type
if (null != localProcedure &&
localProcedure.IsConstructor &&
core.IsFunctionCodeBlock(codeBlock))
{
buildStatus.LogSemanticError(Resources.ReturnStatementIsNotAllowedInConstructor,
core.CurrentDSFileName,
node.line,
node.col);
}
EmitReturnToRegister(node.line, node.col, node.endLine, node.endCol);
}
示例6: EmitCharNode
protected void EmitCharNode(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false, ProtoCore.CompilerDefinitions.Associative.SubCompilePass subPass = ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kNone)
{
if (subPass == ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kUnboundIdentifier)
{
return;
}
dynamic cNode = node;
if (!enforceTypeCheck || core.TypeSystem.IsHigherRank((int)PrimitiveType.kTypeChar, inferedType.UID))
{
inferedType.UID = (int)PrimitiveType.kTypeChar;
}
inferedType.UID = isBooleanOp ? (int)PrimitiveType.kTypeBool : inferedType.UID;
String value = (String)cNode.Value;
if (value.Length > 1)
{
buildStatus.LogSyntaxError(Resources.TooManyCharacters, null, node.line, node.col);
}
String strValue = "'" + value + "'";
StackValue op = ProtoCore.DSASM.StackValue.BuildChar(value[0]);
if (core.Options.TempReplicationGuideEmptyFlag && emitReplicationGuide)
{
int replicationGuides = 0;
EmitInstrConsole(ProtoCore.DSASM.kw.push, replicationGuides + "[guide]");
StackValue opNumGuides = StackValue.BuildReplicationGuide(replicationGuides);
EmitPush(opNumGuides);
EmitInstrConsole(ProtoCore.DSASM.kw.pushg, strValue);
EmitPushG(op, node.line, node.col);
}
else
{
EmitInstrConsole(ProtoCore.DSASM.kw.push, strValue);
EmitPush(op, cNode.line, cNode.col);
}
}
示例7: EmitDoubleNode
protected void EmitDoubleNode(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false, ProtoCore.AssociativeGraph.GraphNode graphNode = null, ProtoCore.CompilerDefinitions.Associative.SubCompilePass subPass = ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kNone)
{
if (subPass == ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kUnboundIdentifier)
{
return;
}
double value;
if (node is AST.ImperativeAST.DoubleNode)
{
value = (node as AST.ImperativeAST.DoubleNode).Value;
}
else if (node is AST.AssociativeAST.DoubleNode)
{
value = (node as AST.AssociativeAST.DoubleNode).Value;
}
else
{
throw new InvalidDataException("The input node is not DoubleNode");
}
if (!enforceTypeCheck || core.TypeSystem.IsHigherRank((int)PrimitiveType.kTypeDouble, inferedType.UID))
{
inferedType.UID = (int)PrimitiveType.kTypeDouble;
}
inferedType.UID = isBooleanOp ? (int)PrimitiveType.kTypeBool : inferedType.UID;
if (core.Options.TempReplicationGuideEmptyFlag)
{
if (emitReplicationGuide)
{
int replicationGuides = 0;
// Push the number of guides
EmitInstrConsole(ProtoCore.DSASM.kw.push, replicationGuides + "[guide]");
StackValue opNumGuides = StackValue.BuildReplicationGuide(replicationGuides);
EmitPush(opNumGuides);
}
}
StackValue op = StackValue.BuildDouble(value);
if (core.Options.TempReplicationGuideEmptyFlag && emitReplicationGuide)
{
EmitInstrConsole(ProtoCore.DSASM.kw.pushg, value.ToString());
EmitPushG(op, node.line, node.col);
}
else
{
EmitInstrConsole(ProtoCore.DSASM.kw.push, value.ToString());
EmitPush(op, node.line, node.col);
}
if (IsAssociativeArrayIndexing)
{
if (null != graphNode)
{
// Get the last dependent which is the current identifier being indexed into
SymbolNode literalSymbol = new SymbolNode();
literalSymbol.name = value.ToString();
AssociativeGraph.UpdateNode intNode = new AssociativeGraph.UpdateNode();
intNode.symbol = literalSymbol;
intNode.nodeType = AssociativeGraph.UpdateNodeType.kLiteral;
if (graphNode.isIndexingLHS)
{
graphNode.dimensionNodeList.Add(intNode);
}
else
{
int lastDependentIndex = graphNode.dependentList.Count - 1;
ProtoCore.AssociativeGraph.UpdateNode currentDependentNode = graphNode.dependentList[lastDependentIndex].updateNodeRefList[0].nodeList[0];
currentDependentNode.dimensionNodeList.Add(intNode);
if (core.Options.GenerateSSA)
{
if (null != firstSSAGraphNode)
{
lastDependentIndex = firstSSAGraphNode.dependentList.Count - 1;
ProtoCore.AssociativeGraph.UpdateNode firstSSAUpdateNode = firstSSAGraphNode.dependentList[lastDependentIndex].updateNodeRefList[0].nodeList[0];
firstSSAUpdateNode.dimensionNodeList.Add(intNode);
}
}
}
}
}
}
示例8: EmitIdentifierListNode
protected void EmitIdentifierListNode(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false, ProtoCore.AssociativeGraph.GraphNode graphNode = null, ProtoCore.DSASM.AssociativeSubCompilePass subPass = ProtoCore.DSASM.AssociativeSubCompilePass.kNone)
{
if (subPass == ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier)
{
//to process all unbounded parameters if any
dynamic iNode = node;
while (iNode is ProtoCore.AST.AssociativeAST.IdentifierListNode || iNode is ProtoCore.AST.ImperativeAST.IdentifierListNode)
{
dynamic rightNode = iNode.RightNode;
if (rightNode is ProtoCore.AST.AssociativeAST.FunctionCallNode || rightNode is ProtoCore.AST.ImperativeAST.FunctionCallNode)
{
foreach (dynamic paramNode in rightNode.FormalArguments)
{
ProtoCore.Type paramType = new ProtoCore.Type();
paramType.UID = (int)ProtoCore.PrimitiveType.kTypeVoid;
paramType.IsIndexable = false;
DfsTraverse(paramNode, ref paramType, false, graphNode, ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier);
}
}
iNode = iNode.LeftNode;
}
return;
}
int depth = 0;
ProtoCore.Type leftType = new ProtoCore.Type();
leftType.UID = (int)PrimitiveType.kInvalidType;
leftType.IsIndexable = false;
bool isFirstIdent = true;
bool isIdentReference = DfsEmitIdentList(node, null, globalClassIndex, ref leftType, ref depth, ref inferedType, false, ref isFirstIdent, graphNode, subPass);
inferedType.UID = isBooleanOp ? (int)PrimitiveType.kTypeBool : inferedType.UID;
}
示例9: DfsTraverse
protected abstract void DfsTraverse(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false, ProtoCore.AssociativeGraph.GraphNode graphNode = null, ProtoCore.DSASM.AssociativeSubCompilePass subPass = ProtoCore.DSASM.AssociativeSubCompilePass.kNone);
示例10: EmitExprListNode
protected void EmitExprListNode(Node node, ref ProtoCore.Type inferedType, ProtoCore.AssociativeGraph.GraphNode graphNode = null, ProtoCore.DSASM.AssociativeSubCompilePass subPass = ProtoCore.DSASM.AssociativeSubCompilePass.kNone)
{
int firstType = (int)PrimitiveType.kTypeVoid;
dynamic exprlist = node;
int rank = 0;
if (subPass != ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier)
{
//get the rank
dynamic ltNode = exprlist;
while ((ltNode is ProtoCore.AST.ImperativeAST.ExprListNode || ltNode is ProtoCore.AST.AssociativeAST.ExprListNode) && ltNode.list.Count > 0)
{
rank++;
ltNode = ltNode.list[0];
}
}
foreach (Node listNode in exprlist.list)
{
// The infered type is the type of the first element
DfsTraverse(listNode, ref inferedType, false, graphNode, subPass);
if ((listNode is ProtoCore.AST.AssociativeAST.ExprListNode) == false)
{
// If 'listNode' was another sub-array, then don't bother adding
// it here, as it has added itself in the call to 'DfsTraverse'.
if (null != this.arrayElementType)
this.arrayElementType.AppendChildType(inferedType);
}
if ((int)PrimitiveType.kTypeVoid == firstType)
{
firstType = inferedType.UID;
}
}
inferedType.UID = firstType;
inferedType.IsIndexable = true;
inferedType.rank = rank;
}
示例11: EmitReturnStatement
protected void EmitReturnStatement(Node node, ProtoCore.Type inferedType)
{
// Check the returned type against the declared return type
if (null != localProcedure && compileState.IsFunctionCodeBlock(codeBlock))
{
if (localProcedure.isConstructor)
{
Debug.Assert(ProtoCore.DSASM.Constants.kInvalidIndex != inferedType.UID);
ProtoCore.DSASM.ClassNode typeNode = compileState.ClassTable.ClassNodes[inferedType.UID];
Debug.Assert(null != typeNode);
}
}
}
示例12: EmitNullNode
protected void EmitNullNode(Node node, ref ProtoCore.Type inferedType, bool isBooleanOp = false, ProtoCore.DSASM.AssociativeSubCompilePass subPass = ProtoCore.DSASM.AssociativeSubCompilePass.kNone)
{
if (subPass == ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier)
{
return;
}
dynamic nullNode = node;
inferedType.UID = (int)PrimitiveType.kTypeNull;
inferedType.UID = isBooleanOp ? (int)PrimitiveType.kTypeBool : inferedType.UID;
}
示例13: EmitStringNode
protected void EmitStringNode(Node node, ref ProtoCore.Type inferedType, ProtoCore.DSASM.AssociativeSubCompilePass subPass = ProtoCore.DSASM.AssociativeSubCompilePass.kNone)
{
if (subPass == ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier)
{
return;
}
dynamic sNode = node;
if (!enforceTypeCheck || compileState.TypeSystem.IsHigherRank((int)PrimitiveType.kTypeString, inferedType.UID))
{
inferedType.UID = (int)PrimitiveType.kTypeString;
}
throw new NotImplementedException();
}
示例14: EmitBooleanNode
protected void EmitBooleanNode(Node node, ref ProtoCore.Type inferedType, ProtoCore.DSASM.AssociativeSubCompilePass subPass = ProtoCore.DSASM.AssociativeSubCompilePass.kNone)
{
if (subPass == ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier)
{
return;
}
dynamic bNode = node;
// We need to get inferedType for boolean variable so that we can perform type check
if (enforceTypeCheck || compileState.TypeSystem.IsHigherRank((int)PrimitiveType.kTypeBool, inferedType.UID))
{
inferedType.UID = (int)PrimitiveType.kTypeBool;
}
}
示例15: DfsEmitArrayIndexHeap
protected int DfsEmitArrayIndexHeap(Node node, AssociativeGraph.GraphNode graphNode = null, ProtoCore.AST.Node parentNode = null, ProtoCore.CompilerDefinitions.Associative.SubCompilePass subPass = ProtoCore.CompilerDefinitions.Associative.SubCompilePass.kNone)
{
int indexCnt = 0;
Validity.Assert(node is ProtoCore.AST.AssociativeAST.ArrayNode || node is ProtoCore.AST.ImperativeAST.ArrayNode);
IsAssociativeArrayIndexing = true;
dynamic arrayNode = node;
while (arrayNode is ProtoCore.AST.AssociativeAST.ArrayNode || arrayNode is ProtoCore.AST.ImperativeAST.ArrayNode)
{
++indexCnt;
dynamic array = arrayNode;
ProtoCore.Type lastType = TypeSystem.BuildPrimitiveTypeObject(PrimitiveType.kTypeVar, 0);
DfsTraverse(array.Expr, ref lastType, false, graphNode, subPass, parentNode);
arrayNode = array.Type;
}
IsAssociativeArrayIndexing = false;
return indexCnt;
}