void Function(YSParseNode FunctionNode) { Debug("Beginning a function definition"); Current = FunctionNode; string FunctionName = FunctionNode.Children [0].Token.Content; ExpectNonExistance(FunctionName); FunctionFrame FunctionFrame = new FunctionFrame(); FunctionParamList(FunctionNode.Children [1], ref FunctionFrame); IdentityType IType; List <int> Dimens; DataType(FunctionNode.Children [2], out IType, out Dimens); FunctionFrame.Returns = IType; FunctionFrame.ReturnDimensions = (Dimens != null) ? Dimens.ToArray() : null; //STATE.TranslateTokenTypeToIdentityType (FunctionNode.Children [2].Token.Type); FunctionFrame.Block = FunctionNode.Children [3]; IDPacket newFunction = IDPacket.CreateIDPacket(STATE, FunctionName, IdentityType.Function); STATE.PutFunction(newFunction, FunctionFrame); Debug("Finished function definition"); }
void FunctionParamList(YSParseNode FunctionParamListNode, ref FunctionFrame Frame) { Debug("Reading param list.."); Current = FunctionParamListNode; if (FunctionParamListNode.Children.Count > 0) { int FPC = 0; while (FPC < FunctionParamListNode.Children.Count) { FunctionParamater fp = new FunctionParamater(); //fp.Type = STATE.TranslateTokenTypeToIdentityType (FunctionParamListNode.Children [FPC++].Token.Type); List <int> Dimens; DataType(FunctionParamListNode.Children [FPC++], out fp.Type, out Dimens); fp.TypeDimensions = (Dimens != null) ? Dimens.ToArray() : null; //Debug ("Type " + fp.Type + " Token " + FunctionParamListNode.Children [FPC].Token.Type); fp.Name = FunctionParamListNode.Children [FPC++].Token.Content; Frame.Parameters.Add(fp); } } Debug("Read param list..."); }