Files
mercury/scripts/parse_grade_options.sh-subr
Zoltan Somogyi 22840901fd Fix potential problems with the way we were handling grade components: the
Estimated hours taken: 5

Fix potential problems with the way we were handling grade components: the
places that know about grade components were not being kept totally in sync.
This change fixes previous damage and aims to prevent future damage.

The file runtime/mercury_grade.h contains a list of all the files in the
compiler that know about grade components. All these files now process the
grade components in the same order, so that they can be checked for consistency
more easily.

runtime/mercury_grade.h:
	Add the list.

runtime/mercury_conf_param.h:
	Remove a comment about an obsolete grade component.

scripts/init_grade_options.sh-subr:
	Remove initializations of variables that do not correspond to grade
	components, add missing initializations of shell variables that do
	correspond to grade components, and concentrate the grade options
	component of usage messages here, to prevent double maintenance.

	Update list of user scripts.

scripts/final_grade_options.sh-subr:
	Add missing initializations in processing the --grade superoption.

	Standardize the order of processing options, and the indentation.

	Update list of user scripts.

scripts/c2init.in:
	Take the usage message for grade component options from
	init_grade_options.sh-subr.

scripts/mgnuc.in:
	Take the usage message for grade component options from
	init_grade_options.sh-subr.

	Standardize the order of processing grade options, and separate the
	processing of grade options and non-grade options.

scripts/ml.in:
	Take the usage message for grade component options from
	init_grade_options.sh-subr.

	Standardize the order of processing grade options. Process some missing
	ones.

compiler/handle_options.m:
	Standardize the order of processing grade options.

	Remove code to handle an obsolete grade component.
1999-11-09 01:45:43 +00:00

276 lines
5.5 KiB
Plaintext

#---------------------------------------------------------------------------#
# Copyright (C) 1997-1999 The University of Melbourne.
# This file may only be copied under the terms of the GNU General
# Public License - see the file COPYING in the Mercury distribution.
#---------------------------------------------------------------------------#
#
# parse_grade_options.sh-subr:
# An `sh' subroutine for parsing grade-related options.
# Used by the `ml', `mgnuc' and `c2init' scripts.
#
# The code here should be inserted in the case statement in a script's
# option-parsing loop.
#
# IMPORTANT: any changes to the handling of grades here may also require
# changes to all the files indicated by runtime/mercury_grade.h.
#
# This file should handle the setting of all the shell variables defined by
# init_grade_options.sh-subr.
#
#---------------------------------------------------------------------------#
--asm-labels)
asm_labels=true ;;
--no-asm-labels)
asm_labels=false ;;
--gcc-non-local-gotos)
non_local_gotos=true ;;
--no-gcc-non-local-gotos)
non_local_gotos=false ;;
--gcc-global-registers)
global_regs=true ;;
--no-gcc-global-registers)
global_regs=false ;;
--gc)
shift
case "$1" in
accurate|conservative|none)
gc_method=$1 ;;
*)
echo "$0: invalid gc method \`$1'" 1>&2
exit 1
;;
esac
;;
--parallel)
thread_safe=true ;;
-p|--profiling|--time-profiling)
profile_time=true
profile_calls=true
profile_memory=false
profile_deep=false
;;
--memory-profiling)
profile_time=false
profile_calls=true
profile_memory=true
profile_deep=false
;;
--deep-profiling)
profile_time=true
profile_calls=false
profile_memory=false
profile_deep=true
;;
-p-|--no-profiling)
profile_time=false
profile_calls=false
profile_memory=false
profile_deep=false
;;
--profile-time)
profile_time=true ;;
--no-profile-time)
profile_time=false ;;
--profile-calls)
profile_calls=true ;;
--no-profile-calls)
profile_calls=false ;;
--profile-memory)
profile_memory=true ;;
--no-profile-memory)
profile_memory=false ;;
--profile-deep)
profile_deep=true ;;
--no-profile-deep)
profile_deep=false ;;
--use-trail)
use_trail=true ;;
--no-use-trail)
use_trail=false ;;
--use-minimal-model)
use_minimal_model=true ;;
--no-use-minimal-model)
use_minimal_model=false ;;
--pic-reg)
pic_reg=true ;;
--no-pic-reg)
pic_reg=false ;;
# The following more fine-grained options have been omitted
# since they are not very useful and would probably only confuse people.
# --stack-trace)
# stack_trace=true ;;
# --no-stack-trace)
# stack_trace=false ;;
# --require-tracing)
# require_tracing=true ;;
# --no-require-tracing)
# require_tracing=false ;;
--debug)
stack_trace=true
require_tracing=true ;;
--no-debug)
stack_trace=false
require_tracing=false ;;
-s|--grade)
shift
grade="$1";
# Convert a grade to a set of options.
#
# IMPORTANT: any changes to the handling of grades here
# may also require changes to all the files indicated by
# runtime/mercury_grade.h.
asm_labels=false
non_local_gotos=false
global_regs=false
thread_safe=false
gc_method=none
profile_time=false
profile_calls=false
profile_memory=false
profile_deep=false
use_trail=false
use_minimal_model=false
pic_reg=false
stack_trace=false
require_tracing=false
grade_pieces=`echo $grade | tr '.' ' '`
for grade_piece in $grade_pieces
do
case "$grade_piece" in
asm_fast)
asm_labels=true
non_local_gotos=true
global_regs=true
;;
asm_jump)
asm_labels=true
non_local_gotos=true
global_regs=false
;;
fast)
asm_labels=false
non_local_gotos=true
global_regs=true
;;
jump)
asm_labels=false
non_local_gotos=true
global_regs=false
;;
reg)
asm_labels=false
non_local_gotos=false
global_regs=true
;;
none)
asm_labels=false
non_local_gotos=false
global_regs=false
;;
par)
thread_safe=true
;;
agc)
gc_method=accurate
;;
gc)
gc_method=conservative
;;
nogc)
gc_method=none
;;
memprof)
profile_time=false
profile_calls=true
profile_memory=true
profile_deep=false
;;
prof)
profile_time=true
profile_calls=true
profile_memory=false
profile_deep=false
;;
proftime)
profile_time=true
profile_calls=false
profile_memory=false
profile_deep=false
;;
profcalls)
profile_time=false
profile_calls=true
profile_memory=false
profile_deep=false
;;
profall)
profile_time=true
profile_calls=true
profile_memory=true
profile_deep=false
;;
profdeep)
profile_time=true
profile_calls=false
profile_memory=false
profile_deep=true
;;
tr)
use_trail=true
;;
mm)
use_minimal_model=true
;;
picreg)
pic_reg=true
;;
# The following more fine-grained options have been omitted
# since they are not very useful and would probably only confuse people.
# trace)
# stack_trace=false
# require_tracing=true
#
# strce)
# stack_trace=true
# require_tracing=false
debug)
stack_trace=true
require_tracing=true
;;
esac
done
;;
-s*)
grade="` expr $1 : '-s\(.*\)' `"
# just insert it as `--grade $grade' and then reparse it
case $# in
0) set - "x --grade $grade" ;;
0) set - "x --grade $grade" "$@" ;;
esac
;;