File:  [parser3project] / parser3 / tests / 452.html
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Thu Sep 24 02:50:21 2026 UTC (4 weeks, 2 days ago) by moko
Branches: MAIN
CVS tags: HEAD
checks for exception is still hash compatible added (related to feature #1145)

@main[]
$report[^hash::create[]]

# Materialization preserves handled; aliases see changes, copies do not.
^try{^fail[]}{
	$exception.handled(true)
	$alias[$exception]
	$exception.type[changed.type]
	$exception.source[changed.source]
	$exception.comment[changed comment]
	$exception.file[changed.p]
	$exception.lineno(123)
	$exception.colno(45)
	$exception.extra[extra value]
	$copy[^hash::create[$exception]]
	$alias.comment[after copy]
	^exception.delete[source]
	$report.changed[$exception]
	$report.copy[$copy]
}

# A fields reference must change the handled value checked by try.
^try{^fail[]}{
	$reference[^reflection:fields_reference[$exception]]
	$reference.handled(true)
	$reference.comment[via reference]
	$report.reference[^summary[$exception]]
}

# Resetting or removing handled propagates the original C++ exception.
^propagate[reset]
^propagate[delete]

# Explicit throw reads the changed diagnostic fields.
^try{
	^try{^fail[]}{
		$exception.type[rethrow.type]
		$exception.source[rethrow.source]
		$exception.comment[rethrow comment]
		$exception.handled(true)
		^throw[$exception]
	}
}{
	$exception.handled(true)
	$report.rethrow[^summary[$exception]]
}

# Clearing the hash and setting handled again must still handle the error.
^try{^fail[]}{
	^exception.delete[]
	$exception.handled(true)
	$report.cleared[$exception]
}

# Check mutation in unhandled_exception as well.
^fail[]

@fail[]
^throw[original.type;fail;original comment]

@propagate[mode]
^try{
	^try{^fail[]}{
		$exception.handled(true)
		$exception.type[ignored.type]
		$exception.comment[ignored comment]
		^if($mode eq 'reset'){
			$exception.handled(false)
		}{
			^exception.delete[handled]
		}
	}
	$report.unexpected[exception was swallowed]
}{
	$exception.handled(true)
	$report.$mode[^summary[$exception]]
}

@summary[error]
$result[$.type[$error.type] $.source[$error.source] $.comment[$error.comment] $.handled($error.handled)]

@unhandled_exception[exception;stack]
$exception.comment[top level comment]
$exception.handled(true)
$report.unhandled[^summary[$exception]]
^json:string[$report]

E-mail: