DIP65: Fixing Exception Handling Syntax

Brian Schott via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 17 15:07:41 PDT 2014


On Thursday, 17 July 2014 at 21:44:02 UTC, Walter Bright wrote:
> Writing such a tool is a major operation.

// I disagree.

module dfix;

import std.lexer;
import std.d.lexer;
import std.array;
import std.stdio;

void main(string[] args)
{
	File input = File(args[1]);
	File output = args.length > 2 ? File(args[2]) : stdout;
	ubyte[] inputBytes = uninitializedArray!(ubyte[])(input.size);
	input.rawRead(inputBytes);
	StringCache cache = StringCache(StringCache.defaultBucketCount);
	LexerConfig config;
	config.fileName = args[1];
	config.stringBehavior = StringBehavior.source;
	auto tokens = byToken(inputBytes, config, &cache).array;
	foreach (i; 0 .. tokens.length)
	{
		switch (tokens[i].type)
		{
		case tok!"catch":
			if (i + 1 < tokens.length && tokens[i + 1].type != tok!"(")
			{
				output.write("catch (Throwable)");
				break;
			}
			else
				goto default;
		default:
			output.write(tokens[i].text is null
				? str(tokens[i].type)
				: tokens[i].text);
			break;
		}
	}
}


More information about the Digitalmars-d mailing list