Possible bug in boxing unit?

akcom CppCoder at gmail.com
Wed May 17 09:27:04 PDT 2006


H:\workspace\server>dmd -unittest -v main.d settings.d
parse     main
parse     settings
semantic  main
semantic  settings
semantic2 main
semantic2 settings
semantic3 main
semantic3 settings
code      main
generating code for function 'main'
code      settings
generating code for function 'this'
generating code for function 'this'
generating code for function '_dtor'
generating code for function 'set'
generating code for function 'unset'
generating code for function 'get'
generating code for function 'isSet'
generating code for function 'keyList'
generating code for function '__unittest0'
generating code for function 'unboxable'
generating code for function 'unboxCastInteger'
E:\dmd\bin\..\..\dm\bin\link.exe main+settings,,,user32+kernel32/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

settings.obj(settings)
  Error 42: Symbol Undefined _assert_3std5boxer
--- errorlevel 1

H:\workspace\server>

offending line:
uint boxValue = unboxCastInteger!(uint)(b);

everything works fine when it is removed.
Complete source file as a reference:

///////////////////////////////////////////////////////////////////////
module settings;

private import std.boxer;

class SettingsException : Exception
{
	public this( char[] msg )
	{
		super( msg );
	}
}

class Settings
{
	private Box [ char[] ]settingList;
	
	public this()
	{
	}
	
	public ~this()
	{
	}
	
	//sets or adds a setting key to the lsit
	public void set( char []name, Box value )
	{
		Box *boxValue;
		
		//check if the name is already in the aa
		boxValue = (name in settingList);
		
		//if it's not, add it
		if ( boxValue == null )
		{
			settingList[name] = value;
		}
		else
		{
			//we already have this name in the list, just change it
			settingList[name] = value;
		}
	}
	
	//used to remove a setting from the list
	public void unset( char []name )
	{
		settingList.remove( name );
	}
	
	//used to retrieve an item from the list based on its key
	public Box get( char []name )
	{
		//if it's not in our list...
		if ( isSet( name ) == false )
		{
			throw new SettingsException( "key not found in list" );
		}
		return settingList[name];
	}
	
	//do we have a setting with that key?
	public bool isSet( char []name )
	{
		return (name in settingList) != null;
	}
	
	public char [][]keyList()
	{
		return settingList.keys;
	}
	
	unittest
	{
		Settings set = new Settings();
		set.set( "abc", box( 1234 ) );
		set.set( "abc", box( 1678 ) );
		
		Box b = set.get( "abc" );
		assert( unboxable!(uint)(b) );
		uint boxValue = unboxCastInteger!(uint)(b);
		assert( boxValue == 1334 );
		
		set.unset( "foo" );
		assert( set.isSet( "bar" ) == false );
		assert( set.isSet( "abc" ) == true );
		set.unset( "abc" );
		assert( set.isSet( "abc" ) == false );
		
	}
}



More information about the Digitalmars-d-bugs mailing list