本文整理汇总了C#中ProtoCore.AssociativeGraph.UpdateNodeRef类的典型用法代码示例。如果您正苦于以下问题:C# UpdateNodeRef类的具体用法?C# UpdateNodeRef怎么用?C# UpdateNodeRef使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
UpdateNodeRef类属于ProtoCore.AssociativeGraph命名空间,在下文中一共展示了UpdateNodeRef类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PushSymbolReference
public void PushSymbolReference(SymbolNode symbol, UpdateNodeType type = UpdateNodeType.kSymbol)
{
Validity.Assert(null != symbol);
UpdateNode updateNode = new UpdateNode();
updateNode.symbol = symbol;
updateNode.nodeType = type;
UpdateNodeRef nodeRef = new UpdateNodeRef();
nodeRef.PushUpdateNode(updateNode);
updateNodeRefList.Add(nodeRef);
}
示例2: BuildSSADependency
private void BuildSSADependency(Node node, AssociativeGraph.GraphNode graphNode)
{
// Jun Comment: set the graphNode dependent as this identifier list
ProtoCore.Type type = new ProtoCore.Type();
type.UID = globalClassIndex;
ProtoCore.AssociativeGraph.UpdateNodeRef nodeRef = new AssociativeGraph.UpdateNodeRef();
DFSGetSymbolList(node, ref type, nodeRef);
if (null != graphNode && nodeRef.nodeList.Count > 0)
{
ProtoCore.AssociativeGraph.GraphNode dependentNode = new ProtoCore.AssociativeGraph.GraphNode();
dependentNode.updateNodeRefList.Add(nodeRef);
graphNode.PushDependent(dependentNode);
}
}
示例3: ResolveFinalNodeRefs
//
// proc ResolveFinalNodeRefs()
// foreach graphnode in graphnodeList
// def firstproc = graphnode.firstproc
// // Auto-generate the updateNodeRefs for this graphnode given the
// // list stored in the first procedure found in the assignment expression
// foreach noderef in firstProc.updatedProperties
// def n = graphnode.firstProcRefIndex
// def autogenRef = updateNodeRef[n]
// autogenRef.append(noderef)
// graphnode.pushUpdateRef(autogenRef)
// end
// end
// end
//
private void ResolveFinalNodeRefs()
{
foreach (ProtoCore.AssociativeGraph.GraphNode graphNode in codeBlock.instrStream.dependencyGraph.GraphList)
{
ProtoCore.DSASM.ProcedureNode firstProc = graphNode.firstProc;
if (null == firstProc || firstProc.IsAutoGenerated)
{
continue;
}
// TODO: The following implementation is wrong.
// Suppose for function call: x = foo().bar(); which converted
// to x = %dot(foo(), bar(), ...); the following checking skips
// it because %dot() is an internal function. -Yu Ke
// Do this only for non auto-generated function calls
//if any local var is depend on global var
if (core.Options.localDependsOnGlobalSet)
{
if (!firstProc.Name.ToCharArray()[0].Equals('_') && !firstProc.Name.ToCharArray()[0].Equals('%'))
{
//for each node
foreach (ProtoCore.AssociativeGraph.GraphNode gNode in codeBlock.instrStream.dependencyGraph.GraphList)
{
if (gNode.updateNodeRefList != null && gNode.updateNodeRefList.Count != 0)
{
if (gNode.procIndex == firstProc.ID && !gNode.updateNodeRefList[0].nodeList[0].symbol.name.ToCharArray()[0].Equals('%'))
{
foreach (ProtoCore.AssociativeGraph.GraphNode dNode in gNode.dependentList)
{
if (dNode.procIndex == ProtoCore.DSASM.Constants.kGlobalScope)
{
if (!dNode.updateNodeRefList[0].nodeList[0].symbol.name.ToCharArray()[0].Equals('%'))
{
graphNode.PushDependent(dNode);
}
}
}
}
}
}
}
}
if (firstProc.ClassID == Constants.kGlobalScope)
{
graphNode.updateNodeRefList.AddRange(firstProc.UpdatedGlobalVariables);
}
else
{
// For each property modified
foreach (ProtoCore.AssociativeGraph.UpdateNodeRef updateRef in firstProc.UpdatedProperties)
{
int index = graphNode.firstProcRefIndex;
// Is it a global function
if (ProtoCore.DSASM.Constants.kInvalidIndex != index)
{
if (core.Options.GenerateSSA)
{
foreach (ProtoCore.AssociativeGraph.GraphNode dependent in graphNode.dependentList)
{
// Do this only if first proc is a member function...
ProtoCore.AssociativeGraph.UpdateNodeRef autogenRef = new ProtoCore.AssociativeGraph.UpdateNodeRef(dependent.updateNodeRefList[0]);
autogenRef = autogenRef.GetUntilFirstProc();
// ... and the first symbol is an instance of a user-defined type
int last = autogenRef.nodeList.Count - 1;
Validity.Assert(autogenRef.nodeList[last].nodeType != ProtoCore.AssociativeGraph.UpdateNodeType.kMethod && null != autogenRef.nodeList[last].symbol);
if (autogenRef.nodeList[last].symbol.datatype.UID >= (int)PrimitiveType.kMaxPrimitives)
{
autogenRef.PushUpdateNodeRef(updateRef);
graphNode.updateNodeRefList.Add(autogenRef);
if (graphNode.lastGraphNode != null)
{
graphNode.lastGraphNode.updateNodeRefList.Add(autogenRef);
}
}
}
}
else
{
// Do this only if first proc is a member function...
ProtoCore.AssociativeGraph.UpdateNodeRef autogenRef = new ProtoCore.AssociativeGraph.UpdateNodeRef(graphNode.dependentList[0].updateNodeRefList[0]);
//.........这里部分代码省略.........
示例4: GetUpdatedNodeRef
private ProtoCore.AssociativeGraph.UpdateNodeRef GetUpdatedNodeRef(AssociativeNode node)
{
if (null == localProcedure)
{
return null;
}
// Get the lhs symbol list
ProtoCore.Type type = new ProtoCore.Type();
type.UID = globalClassIndex;
ProtoCore.AssociativeGraph.UpdateNodeRef leftNodeRef = new ProtoCore.AssociativeGraph.UpdateNodeRef();
DFSGetSymbolList(node, ref type, leftNodeRef);
return leftNodeRef;
}
示例5: TraverseDotFunctionCall
//.........这里部分代码省略.........
// Its an accceptable method at this point
if (!isUnresolvedMethod)
{
int funtionArgCount = 0;
//foreach (AssociativeNode paramNode in funcCall.FormalArguments)
for (int n = 0; n < funcCall.FormalArguments.Count; ++n)
{
AssociativeNode paramNode = funcCall.FormalArguments[n];
ProtoCore.Type paramType = new ProtoCore.Type();
paramType.UID = (int)ProtoCore.PrimitiveType.kTypeVoid;
paramType.IsIndexable = false;
emitReplicationGuide = false;
// If it's a binary node then continue type check, otherwise disable type check and just take the type of paramNode itself
// f(1+2.0) -> type check enabled - param is typed as double
// f(2) -> type check disabled - param is typed as int
enforceTypeCheck = !(paramNode is BinaryExpressionNode);
// TODO Jun: Cleansify me
// What im doing is just taking the second parameter of the dot op (The method call)
// ...and adding it to the graph node dependencies
if (ProtoCore.DSASM.Constants.kDotArgIndexDynTableIndex == n)
{
if (subPass != ProtoCore.DSASM.AssociativeSubCompilePass.kUnboundIdentifier)
{
if (!isConstructor)
{
if (null != procCallNode)
{
if (graphNode.dependentList.Count > 0)
{
ProtoCore.AssociativeGraph.UpdateNodeRef nodeRef = new ProtoCore.AssociativeGraph.UpdateNodeRef();
ProtoCore.AssociativeGraph.UpdateNode updateNode = new ProtoCore.AssociativeGraph.UpdateNode();
ProtoCore.DSASM.ProcedureNode procNodeDummy = new ProtoCore.DSASM.ProcedureNode();
if (procCallNode.isAutoGenerated)
{
ProtoCore.DSASM.SymbolNode sym = new ProtoCore.DSASM.SymbolNode();
sym.name = procName.Remove(0, ProtoCore.DSASM.Constants.kSetterPrefix.Length);
updateNode.nodeType = ProtoCore.AssociativeGraph.UpdateNodeType.kSymbol;
updateNode.symbol = sym;
}
else
{
procNodeDummy.name = procName;
updateNode.nodeType = ProtoCore.AssociativeGraph.UpdateNodeType.kMethod;
updateNode.procNode = procNodeDummy;
}
graphNode.dependentList[0].updateNodeRefList[0].nodeList.Add(updateNode);
}
}
else
{
// comment Jun:
// This is dotarg whos first argument is also a dotarg
// dotarg(dorarg...)...)
if (graphNode.dependentList.Count > 0)
{
if (ProtoCore.Utils.CoreUtils.IsGetterSetter(procName))
{
ProtoCore.AssociativeGraph.UpdateNode updateNode = new ProtoCore.AssociativeGraph.UpdateNode();
ProtoCore.DSASM.SymbolNode sym = new ProtoCore.DSASM.SymbolNode();
sym.name = procName.Remove(0, ProtoCore.DSASM.Constants.kSetterPrefix.Length);
updateNode.nodeType = ProtoCore.AssociativeGraph.UpdateNodeType.kSymbol;
updateNode.symbol = sym;
示例6: TraverseDotFunctionCall
//.........这里部分代码省略.........
return procCallNode;
}
}
}
}
if (isUnresolvedDot || procCallNode == null)
{
if (dotCallType.UID != (int)PrimitiveType.kTypeVar)
{
inferedType.UID = dotCallType.UID;
}
var procNode = CoreUtils.GetFunctionByName(Constants.kDotMethodName, codeBlock);
if (CoreUtils.IsGetter(procName))
{
EmitFunctionCall(depth, type, arglist, procNode, funcCall, true);
}
else
{
EmitFunctionCall(depth, type, arglist, procNode, funcCall, false, bnode);
}
return procNode;
}
else
{
if (procCallNode.IsConstructor &&
(globalClassIndex != Constants.kInvalidIndex) &&
(globalProcIndex != Constants.kInvalidIndex) &&
(globalClassIndex == inferedType.UID))
{
ProcedureNode contextProcNode = core.ClassTable.ClassNodes[globalClassIndex].ProcTable.Procedures[globalProcIndex];
if (contextProcNode.IsConstructor &&
string.Equals(contextProcNode.Name, procCallNode.Name) &&
contextProcNode.RuntimeIndex == procCallNode.RuntimeIndex)
{
string message = String.Format(ProtoCore.Properties.Resources.kCallingConstructorInConstructor, procName);
buildStatus.LogWarning(WarningID.kCallingConstructorInConstructor, message, core.CurrentDSFileName, node.line, node.col, graphNode);
inferedType.UID = (int)PrimitiveType.kTypeNull;
EmitPushNull();
return procCallNode;
}
}
inferedType = procCallNode.ReturnType;
// Get the dot call procedure
if (isConstructor || isStaticCall)
{
bool isGetter = CoreUtils.IsGetter(procName);
EmitFunctionCall(depth, procCallNode.ClassID, arglist, procCallNode, funcCall, isGetter, bnode);
}
else
{
var procNode = CoreUtils.GetFunctionByName(Constants.kDotMethodName, codeBlock);
if (CoreUtils.IsSetter(procName))
{
EmitFunctionCall(depth, type, arglist, procNode, funcCall);
}
// Do not emit breakpoint at getters only - pratapa
else if (CoreUtils.IsGetter(procName))
{
EmitFunctionCall(depth, type, arglist, procNode, funcCall, true);
}
else
{
EmitFunctionCall(depth, type, arglist, procNode, funcCall, false, bnode);
}
if (dotCallType.UID != (int)PrimitiveType.kTypeVar)
{
inferedType.UID = dotCallType.UID;
}
}
if (isConstructor)
{
foreach (AssociativeNode paramNode in dotCall.FunctionCall.FormalArguments)
{
// Get the lhs symbol list
ProtoCore.Type ltype = new ProtoCore.Type();
ltype.UID = globalClassIndex;
UpdateNodeRef argNodeRef = new UpdateNodeRef();
DFSGetSymbolList(paramNode, ref ltype, argNodeRef);
if (null != graphNode)
{
if (argNodeRef.nodeList.Count > 0)
{
graphNode.updatedArguments.Add(argNodeRef);
}
}
}
graphNode.firstProc = procCallNode;
}
return procCallNode;
}
}
示例7: PushSymbolReference
public void PushSymbolReference(ProtoCore.DSASM.SymbolNode symbol)
{
Validity.Assert(null != symbol);
Validity.Assert(null != updateNodeRefList);
UpdateNode updateNode = new UpdateNode();
updateNode.symbol = symbol;
updateNode.nodeType = UpdateNodeType.kSymbol;
UpdateNodeRef nodeRef = new UpdateNodeRef();
nodeRef.block = symbol.runtimeTableIndex;
nodeRef.PushUpdateNode(updateNode);
updateNodeRefList.Add(nodeRef);
}
示例8: AutoGenerateUpdateArgumentArrayReference
private ProtoCore.AssociativeGraph.UpdateNodeRef AutoGenerateUpdateArgumentArrayReference(AssociativeNode node, ProtoCore.AssociativeGraph.GraphNode graphNode)
{
// Get the lhs symbol list
ProtoCore.Type type = new ProtoCore.Type();
type.UID = globalClassIndex;
ProtoCore.AssociativeGraph.UpdateNodeRef leftNodeRef = new ProtoCore.AssociativeGraph.UpdateNodeRef();
DFSGetSymbolList(node, ref type, leftNodeRef);
ProtoCore.DSASM.SymbolNode firstSymbol = null;
// Check if we are inside a procedure
if (null != localProcedure)
{
if (1 == leftNodeRef.nodeList.Count)
{
firstSymbol = leftNodeRef.nodeList[0].symbol;
// Check if it is an array modification
if (graphNode.dimensionNodeList.Count > 0)
{
// There is only one, see if its an array modification
// Now check if the first element of the identifier list is an argument
foreach (ProtoCore.DSASM.ArgumentInfo argInfo in localProcedure.argInfoList)
{
// See if this modified variable is an argument
if (argInfo.Name == firstSymbol.name)
{
List<ProtoCore.AssociativeGraph.UpdateNode> dimensionList = null;
bool found = localProcedure.updatedArgumentArrays.TryGetValue(argInfo.Name, out dimensionList);
if (found)
{
// Overwrite it
dimensionList = graphNode.dimensionNodeList;
}
else
{
// Create a new modified array entry
localProcedure.updatedArgumentArrays.Add(argInfo.Name, graphNode.dimensionNodeList);
}
}
}
}
}
}
return leftNodeRef;
}
示例9: BuildRealDependencyForIdentList
protected void BuildRealDependencyForIdentList(AssociativeGraph.GraphNode graphNode)
{
// Push all dependent pointers
ProtoCore.AST.AssociativeAST.IdentifierListNode identList = BuildIdentifierList(ssaPointerList);
// Comment Jun: perhaps this can be an assert?
if (null != identList)
{
ProtoCore.Type type = new ProtoCore.Type();
type.UID = globalClassIndex;
ProtoCore.AssociativeGraph.UpdateNodeRef nodeRef = new AssociativeGraph.UpdateNodeRef();
int functionIndex = globalProcIndex;
DFSGetSymbolList_Simple(identList, ref type, ref functionIndex, nodeRef);
if (null != graphNode && nodeRef.nodeList.Count > 0)
{
ProtoCore.AssociativeGraph.GraphNode dependentNode = new ProtoCore.AssociativeGraph.GraphNode();
dependentNode.updateNodeRefList.Add(nodeRef);
graphNode.PushDependent(dependentNode);
}
}
}
示例10: AutoGenerateUpdateReference
private ProtoCore.AssociativeGraph.UpdateNodeRef AutoGenerateUpdateReference(AssociativeNode node, ProtoCore.AssociativeGraph.GraphNode graphNode)
{
// Get the lhs symbol list
ProtoCore.Type type = new ProtoCore.Type();
type.UID = globalClassIndex;
ProtoCore.AssociativeGraph.UpdateNodeRef leftNodeRef = new ProtoCore.AssociativeGraph.UpdateNodeRef();
DFSGetSymbolList(node, ref type, leftNodeRef);
// Auto-generate the updateNodeRefs for this graphnode given the list
// stored in the first procedure found in the assignment expression
if (functionCallStack.Count > 0)
{
ProtoCore.DSASM.ProcedureNode firstProc = functionCallStack[0];
if (!firstProc.IsAutoGenerated)
{
graphNode.firstProc = firstProc;
}
}
return leftNodeRef;
}
示例11: UpdateNodeRef
public UpdateNodeRef(UpdateNodeRef rhs)
{
if (null != rhs && null != rhs.nodeList)
{
nodeList = new List<UpdateNode>(rhs.nodeList);
}
else
{
nodeList = new List<UpdateNode>();
}
}
示例12: DependsOn
public bool DependsOn(UpdateNodeRef modifiedRef, ref GraphNode dependentNode)
{
bool match = false;
foreach (GraphNode depNode in dependentList)
{
Validity.Assert(1 == depNode.updateNodeRefList.Count);
//foreach (UpdateNodeRef depNodeRef in depNode.updateNodeRefList)
//{
UpdateNodeRef depNodeRef = depNode.updateNodeRefList[0];
bool bothSymbolsMatch = false;
bool bothSymbolsStatic = false;
bool inImperativeMatch = false;
bool inImperative = false;
if (depNodeRef != null)
if (depNodeRef.nodeList != null && modifiedRef.nodeList != null && depNodeRef.nodeList.Count > 0 && modifiedRef.nodeList.Count > 0)
{
if (depNodeRef.nodeList.Count > modifiedRef.nodeList.Count)
{
for (int m = 0; m < depNodeRef.nodeList.Count; m++)
{
if (depNodeRef.nodeList[m] != null && modifiedRef.nodeList[0] != null && depNodeRef.nodeList[m].symbol != null && modifiedRef.nodeList[0].symbol != null)
{
if (modifiedRef.nodeList[0].symbol.forArrayName != null && !modifiedRef.nodeList[0].symbol.forArrayName.Equals(""))
{
inImperative = true;
if (modifiedRef.nodeList[0].symbol.functionIndex == Constants.kInvalidIndex)
{
inImperative = inImperative
&& (depNodeRef.nodeList[m].symbol.functionIndex == Constants.kInvalidIndex)
&& (modifiedRef.nodeList[0].symbol.codeBlockId == depNodeRef.nodeList[m].symbol.codeBlockId);
}
if (inImperative && modifiedRef.nodeList[0].symbol.functionIndex == depNodeRef.nodeList[m].symbol.functionIndex && (modifiedRef.nodeList[0].symbol.name == depNodeRef.nodeList[m].symbol.name || modifiedRef.nodeList[0].symbol.forArrayName == depNodeRef.nodeList[m].symbol.name))
{
inImperativeMatch = true;
}
}
}
}
}
else if (depNodeRef.nodeList.Count == modifiedRef.nodeList.Count)
{
for (int m = 0; m < depNodeRef.nodeList.Count && m < modifiedRef.nodeList.Count; m++)
{
if (depNodeRef.nodeList[m] != null && modifiedRef.nodeList[m] != null && depNodeRef.nodeList[m].symbol != null && modifiedRef.nodeList[m].symbol != null)
{
if (modifiedRef.nodeList[0].symbol.forArrayName != null && !modifiedRef.nodeList[0].symbol.forArrayName.Equals(""))
{
inImperative = true;
if (modifiedRef.nodeList[m].symbol.functionIndex == Constants.kInvalidIndex)
{
inImperative = inImperative
&& (depNodeRef.nodeList[m].symbol.functionIndex == Constants.kInvalidIndex)
&& (modifiedRef.nodeList[m].symbol.codeBlockId == depNodeRef.nodeList[m].symbol.codeBlockId);
}
if (inImperative && modifiedRef.nodeList[m].symbol.functionIndex == depNodeRef.nodeList[m].symbol.functionIndex && modifiedRef.nodeList[m].symbol.name == depNodeRef.nodeList[m].symbol.name )
{
inImperativeMatch = true;
}
}
}
}
}
}
if (!inImperativeMatch)
{
// Does first symbol match
if (null != modifiedRef.nodeList[0].symbol && null != depNodeRef.nodeList[0].symbol)
{
bothSymbolsMatch = modifiedRef.nodeList[0].symbol.Equals(depNodeRef.nodeList[0].symbol);
bothSymbolsStatic =
modifiedRef.nodeList[0].symbol.memregion == MemoryRegion.kMemStatic
&& depNodeRef.nodeList[0].symbol.memregion == MemoryRegion.kMemStatic
&& modifiedRef.nodeList[0].symbol.name == depNodeRef.nodeList[0].symbol.name;
// Check further if their array index match in literal values
if (bothSymbolsMatch)
{
// Are the indices the same number
bool areIndicesMatching = modifiedRef.nodeList[0].dimensionNodeList.Count >= depNodeRef.nodeList[0].dimensionNodeList.Count;
if (areIndicesMatching && depNodeRef.nodeList[0].dimensionNodeList.Count > 0)
{
for (int n = 0; n < depNodeRef.nodeList[0].dimensionNodeList.Count; ++n)
{
// Is either a non-literal
UpdateNode modDimNode =modifiedRef.nodeList[0].dimensionNodeList[n];
UpdateNode depDimNode = depNodeRef.nodeList[0].dimensionNodeList[n];
//.........这里部分代码省略.........
示例13: BuildRealDependencyForIdentList
protected void BuildRealDependencyForIdentList(AssociativeGraph.GraphNode graphNode)
{
if (ssaPointerStack.Count == 0)
{
return;
}
// Push all dependent pointers
ProtoCore.AST.AssociativeAST.IdentifierListNode identList = BuildIdentifierList(ssaPointerStack.Peek());
// Comment Jun: perhaps this can be an assert?
if (null != identList)
{
ProtoCore.Type type = new ProtoCore.Type();
type.UID = globalClassIndex;
ProtoCore.AssociativeGraph.UpdateNodeRef nodeRef = new AssociativeGraph.UpdateNodeRef();
int functionIndex = globalProcIndex;
DFSGetSymbolList_Simple(identList, ref type, ref functionIndex, nodeRef);
if (null != graphNode && nodeRef.nodeList.Count > 0)
{
ProtoCore.AssociativeGraph.GraphNode dependentNode = new ProtoCore.AssociativeGraph.GraphNode();
dependentNode.updateNodeRefList.Add(nodeRef);
graphNode.PushDependent(dependentNode);
// If the pointerList is a setter, then it should also be in the lhs of a graphNode
// Given:
// a.x = 1
// Which was converted to:
// tvar = a.set_x(1)
// Set a.x as lhs of the graphnode.
// This means that statement that depends on a.x can re-execute, such as:
// p = a.x;
//
List<ProtoCore.AST.AssociativeAST.AssociativeNode> topList = ssaPointerStack.Peek();
string propertyName = topList[topList.Count - 1].Name;
bool isSetter = propertyName.StartsWith(Constants.kSetterPrefix);
if (isSetter)
{
graphNode.updateNodeRefList.Add(nodeRef);
graphNode.IsLHSIdentList = true;
AutoGenerateUpdateArgumentReference(nodeRef, graphNode);
}
}
}
}
示例14: PushProcReference
public void PushProcReference(ProtoCore.DSASM.ProcedureNode proc)
{
Validity.Assert(null != proc);
Validity.Assert(null != updateNodeRefList);
UpdateNode updateNode = new UpdateNode();
updateNode.procNode = proc;
updateNode.nodeType = UpdateNodeType.kMethod;
UpdateNodeRef nodeRef = new UpdateNodeRef();
nodeRef.PushUpdateNode(updateNode);
updateNodeRefList.Add(nodeRef);
}
示例15: TraverseFunctionCall
//.........这里部分代码省略.........
inferedType.rank++;
}
if (ProtoCore.DSASM.Constants.kInvalidIndex != procNode.procId)
{
//
// ==============Establishing graphnode links in modified arguments=============
//
// proc TraverseCall(node, graphnode)
// ; Get the first procedure, this will only be the first visible procedure
// ; Overloads will be handled at runtime
// def fnode = getProcedure(node)
//
// ; For every argument in the function call,
// ; attach the modified property list and append it to the graphnode update list
// foreach arg in node.args
// if fnode.updatedArgProps is not null
// def noderef = arg.ident (or identlist)
// noderef.append(fnode.updatedArgProps)
// graphnode.pushUpdateRef(noderef)
// end
// end
// end
//
// =============================================================================
//
foreach (AssociativeNode paramNode in funcCall.FormalArguments)
{
// Get the lhs symbol list
ProtoCore.Type ltype = new ProtoCore.Type();
ltype.UID = globalClassIndex;
ProtoCore.AssociativeGraph.UpdateNodeRef argNodeRef = new ProtoCore.AssociativeGraph.UpdateNodeRef();
DFSGetSymbolList(paramNode, ref ltype, argNodeRef);
if (null != graphNode)
{
graphNode.updatedArguments.Add(argNodeRef);
}
}
// The function is at block 0 if its a constructor, member or at the globals scope.
// Its at block 1 if its inside a language block.
// Its limited to block 1 as of R1 since we dont support nested function declarations yet
int blockId = procNode.runtimeIndex;
//push value-not-provided default argument
for (int i = arglist.Count; i < procNode.argInfoList.Count; i++)
{
EmitDefaultArgNode();
}
// Push the function declaration block and indexed array
// Jun TODO: Implementeation of indexing into a function call:
// x = f()[0][1]
int dimensions = 0;
EmitPushVarData(blockId, dimensions);
// The function call
EmitInstrConsole(ProtoCore.DSASM.kw.callr, procNode.name);
// Do not emit breakpoints at built-in methods like _add/_sub etc. - pratapa
if (procNode.isAssocOperator || procNode.name.Equals(ProtoCore.DSASM.Constants.kInlineConditionalMethodName))
{
EmitCall(procNode.procId, type, depth, ProtoCore.DSASM.Constants.kInvalidIndex, ProtoCore.DSASM.Constants.kInvalidIndex,