private void SerializeIntegerConstant(List<string> output, IntegerConstant intValue)
		{
			int value = intValue.Value;
			output.Add("" + value);
		}
Exemple #2
0
		private ForLoop ResolveWithRange(Expression[] rangeArgs)
		{
			List<Executable> init = new List<Executable>();

			Expression increment = new IntegerConstant(null, 1);
			if (rangeArgs.Length == 3)
			{
				if (rangeArgs[2] is IntegerConstant || rangeArgs[2] is Variable)
				{
					increment = rangeArgs[2];
				}
				string variableName = "crayon_conversion_step_" + VARIABLE_ALLOCATION_COUNTER++;
				init.Add(new Assignment(new Variable(null, variableName), new Token("=", null, 0, 0, TokenType.OTHER), rangeArgs[2]));
				increment = new Variable(null, variableName);
			}

			Expression start = new IntegerConstant(null, 0);
			// if 2 or 3 are present, then an explicit start is given
			if (rangeArgs.Length > 1)
			{
				start = rangeArgs[0];
			}

			Expression end = null;
			if (rangeArgs.Length == 1)
			{
				end = rangeArgs[0];
			}
			else
			{
				end = rangeArgs[1];
			}

			if (end is IntegerConstant || end is Variable)
			{
				// this is fine
			}
			else
			{
				string variableName = "crayon_conversion_length_" + VARIABLE_ALLOCATION_COUNTER++;
				init.Add(new Assignment(new Variable(null, variableName), new Token("=", null, 0, 0, TokenType.OTHER), end));
				end = new Variable(null, variableName);
			}

			init.Add(new Assignment(new Variable(this.IteratorVariable, this.IteratorVariable.Value), new Token("=", null, 0, 0, TokenType.OTHER), start));
			Expression condition = new BinaryOpChain(
				new Expression[] { 
					new Variable(this.IteratorVariable, this.IteratorVariable.Value), 
					end },
				new Token[] { new Token("<", null, 0, 0, TokenType.OTHER) });

			List<Executable> step = new List<Executable>()
			{
				new Assignment(
					new Variable(this.IteratorVariable, this.IteratorVariable.Value),
					new Token("+=", null, 0, 0, TokenType.OTHER),
					increment)
			};

			return new ForLoop(this.FirstToken, this, init, condition, step, this.Body);
		}
		private void SerializeIntegerConstant(List<string> output, IntegerConstant intConst)
		{
			output.Add(intConst.Value.ToString());
		}