Changeset 891c3e3
- Timestamp:
- Jan 19, 2018, 11:18:27 AM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 73367a8
- Parents:
- 78754d7 (diff), 4bf3b2b (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 8 deleted
- 6 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
doc/proposals/concurrency/text/frontpgs.tex
r78754d7 r891c3e3 39 39 \vspace*{2.0cm} 40 40 41 Waterloo, Ontario, Canada, 201 7\\41 Waterloo, Ontario, Canada, 2018 \\ 42 42 43 43 \vspace*{1.0cm} 44 44 45 \copyright\ Thierry Delisle 201 7\\45 \copyright\ Thierry Delisle 2018 \\ 46 46 \end{center} 47 47 \end{titlepage} … … 154 154 % \newpage 155 155 156 % L I S T O F T A B L E S 157 % ----------------------------- 158 \addcontentsline{toc}{chapter}{List of Acronyms} 159 \printglossary[type=\acronymtype,title={List of Acronyms}] 160 \cleardoublepage 161 \phantomsection % allows hyperref to link to the correct page 162 156 163 % Change page numbering back to Arabic numerals 157 164 \pagenumbering{arabic} -
doc/proposals/concurrency/thesis.tex
r78754d7 r891c3e3 125 125 \input{future} 126 126 127 \clearpage128 \printglossary[type=\acronymtype]129 \printglossary130 127 131 128 \clearpage 129 130 % B I B L I O G R A P H Y 131 % ----------------------------- 132 \addcontentsline{toc}{chapter}{Bibliography} 132 133 \bibliographystyle{plain} 133 134 \bibliography{pl,local} 135 \cleardoublepage 136 \phantomsection % allows hyperref to link to the correct page 137 138 % G L O S S A R Y 139 % ----------------------------- 140 \addcontentsline{toc}{chapter}{Glossary} 141 \printglossary 142 \cleardoublepage 143 \phantomsection % allows hyperref to link to the correct page 134 144 135 145 -
doc/proposals/concurrency/version
r78754d7 r891c3e3 1 0.11. 3911 0.11.403 -
src/tests/Makefile.am
r78754d7 r891c3e3 17 17 debug=yes 18 18 19 quick_test= vector_testavl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once attributes19 quick_test=avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once attributes 20 20 21 21 if BUILD_CONCURRENCY … … 44 44 45 45 .PHONY : list 46 EXTRA_PROGRAMS = fstream_test vector_testavl_test # build but do not install46 EXTRA_PROGRAMS = fstream_test avl_test # build but do not install 47 47 48 48 fstream_test_SOURCES = fstream_test.c 49 49 fstream_test_CFLAGS = $(if $(test), 2>> $(test), ) ${BUILD_FLAGS} 50 51 vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c52 vector_test_CFLAGS = $(if $(test), 2>> $(test), ) ${BUILD_FLAGS}53 50 54 51 avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c -
src/tests/Makefile.in
r78754d7 r891c3e3 94 94 @BUILD_DEBUG_TRUE@@BUILD_RELEASE_FALSE@am__append_2 = -debug 95 95 @BUILD_DEBUG_TRUE@@BUILD_RELEASE_TRUE@am__append_3 = ${DEBUG_FLAGS} 96 EXTRA_PROGRAMS = fstream_test$(EXEEXT) vector_test$(EXEEXT) \ 97 avl_test$(EXEEXT) 96 EXTRA_PROGRAMS = fstream_test$(EXEEXT) avl_test$(EXEEXT) 98 97 subdir = src/tests 99 98 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 … … 122 121 fstream_test_LDADD = $(LDADD) 123 122 fstream_test_LINK = $(CCLD) $(fstream_test_CFLAGS) $(CFLAGS) \ 124 $(AM_LDFLAGS) $(LDFLAGS) -o $@125 am_vector_test_OBJECTS = vector/vector_test-vector_int.$(OBJEXT) \126 vector/vector_test-array.$(OBJEXT) \127 vector/vector_test-vector_test.$(OBJEXT)128 vector_test_OBJECTS = $(am_vector_test_OBJECTS)129 vector_test_LDADD = $(LDADD)130 vector_test_LINK = $(CCLD) $(vector_test_CFLAGS) $(CFLAGS) \131 123 $(AM_LDFLAGS) $(LDFLAGS) -o $@ 132 124 AM_V_P = $(am__v_P_@AM_V@) … … 162 154 am__v_CCLD_0 = @echo " CCLD " $@; 163 155 am__v_CCLD_1 = 164 SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \ 165 $(vector_test_SOURCES) 166 DIST_SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) \ 167 $(vector_test_SOURCES) 156 SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) 157 DIST_SOURCES = $(avl_test_SOURCES) $(fstream_test_SOURCES) 168 158 am__can_run_installinfo = \ 169 159 case $$AM_UPDATE_INFO_DIR in \ … … 313 303 top_srcdir = @top_srcdir@ 314 304 debug = yes 315 quick_test = vector_testavl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once attributes305 quick_test = avl_test operators numericConstants expression enum array typeof cast dtor-early-exit init_once attributes 316 306 @BUILD_CONCURRENCY_FALSE@concurrent = '-Econcurrent' 317 307 @BUILD_CONCURRENCY_TRUE@concurrent = … … 325 315 fstream_test_SOURCES = fstream_test.c 326 316 fstream_test_CFLAGS = $(if $(test), 2>> $(test), ) ${BUILD_FLAGS} 327 vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c328 vector_test_CFLAGS = $(if $(test), 2>> $(test), ) ${BUILD_FLAGS}329 317 avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c 330 318 avl_test_CFLAGS = $(if $(test), 2>> $(test), ) ${BUILD_FLAGS} … … 390 378 @rm -f fstream_test$(EXEEXT) 391 379 $(AM_V_CCLD)$(fstream_test_LINK) $(fstream_test_OBJECTS) $(fstream_test_LDADD) $(LIBS) 392 vector/$(am__dirstamp):393 @$(MKDIR_P) vector394 @: > vector/$(am__dirstamp)395 vector/$(DEPDIR)/$(am__dirstamp):396 @$(MKDIR_P) vector/$(DEPDIR)397 @: > vector/$(DEPDIR)/$(am__dirstamp)398 vector/vector_test-vector_int.$(OBJEXT): vector/$(am__dirstamp) \399 vector/$(DEPDIR)/$(am__dirstamp)400 vector/vector_test-array.$(OBJEXT): vector/$(am__dirstamp) \401 vector/$(DEPDIR)/$(am__dirstamp)402 vector/vector_test-vector_test.$(OBJEXT): vector/$(am__dirstamp) \403 vector/$(DEPDIR)/$(am__dirstamp)404 405 vector_test$(EXEEXT): $(vector_test_OBJECTS) $(vector_test_DEPENDENCIES) $(EXTRA_vector_test_DEPENDENCIES)406 @rm -f vector_test$(EXEEXT)407 $(AM_V_CCLD)$(vector_test_LINK) $(vector_test_OBJECTS) $(vector_test_LDADD) $(LIBS)408 380 409 381 mostlyclean-compile: 410 382 -rm -f *.$(OBJEXT) 411 383 -rm -f avltree/*.$(OBJEXT) 412 -rm -f vector/*.$(OBJEXT)413 384 414 385 distclean-compile: … … 423 394 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl4.Po@am__quote@ 424 395 @AMDEP_TRUE@@am__include@ @am__quote@avltree/$(DEPDIR)/avl_test-avl_test.Po@am__quote@ 425 @AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-array.Po@am__quote@426 @AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-vector_int.Po@am__quote@427 @AMDEP_TRUE@@am__include@ @am__quote@vector/$(DEPDIR)/vector_test-vector_test.Po@am__quote@428 396 429 397 .c.o: … … 554 522 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 555 523 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fstream_test_CFLAGS) $(CFLAGS) -c -o fstream_test-fstream_test.obj `if test -f 'fstream_test.c'; then $(CYGPATH_W) 'fstream_test.c'; else $(CYGPATH_W) '$(srcdir)/fstream_test.c'; fi` 556 557 vector/vector_test-vector_int.o: vector/vector_int.c558 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_int.o -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_int.Tpo -c -o vector/vector_test-vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c559 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_int.Tpo vector/$(DEPDIR)/vector_test-vector_int.Po560 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_int.c' object='vector/vector_test-vector_int.o' libtool=no @AMDEPBACKSLASH@561 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@562 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_int.o `test -f 'vector/vector_int.c' || echo '$(srcdir)/'`vector/vector_int.c563 564 vector/vector_test-vector_int.obj: vector/vector_int.c565 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_int.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_int.Tpo -c -o vector/vector_test-vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi`566 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_int.Tpo vector/$(DEPDIR)/vector_test-vector_int.Po567 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_int.c' object='vector/vector_test-vector_int.obj' libtool=no @AMDEPBACKSLASH@568 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@569 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_int.obj `if test -f 'vector/vector_int.c'; then $(CYGPATH_W) 'vector/vector_int.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_int.c'; fi`570 571 vector/vector_test-array.o: vector/array.c572 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-array.o -MD -MP -MF vector/$(DEPDIR)/vector_test-array.Tpo -c -o vector/vector_test-array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c573 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-array.Tpo vector/$(DEPDIR)/vector_test-array.Po574 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/array.c' object='vector/vector_test-array.o' libtool=no @AMDEPBACKSLASH@575 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@576 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-array.o `test -f 'vector/array.c' || echo '$(srcdir)/'`vector/array.c577 578 vector/vector_test-array.obj: vector/array.c579 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-array.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-array.Tpo -c -o vector/vector_test-array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi`580 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-array.Tpo vector/$(DEPDIR)/vector_test-array.Po581 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/array.c' object='vector/vector_test-array.obj' libtool=no @AMDEPBACKSLASH@582 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@583 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-array.obj `if test -f 'vector/array.c'; then $(CYGPATH_W) 'vector/array.c'; else $(CYGPATH_W) '$(srcdir)/vector/array.c'; fi`584 585 vector/vector_test-vector_test.o: vector/vector_test.c586 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_test.o -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_test.Tpo -c -o vector/vector_test-vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c587 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_test.Tpo vector/$(DEPDIR)/vector_test-vector_test.Po588 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_test.c' object='vector/vector_test-vector_test.o' libtool=no @AMDEPBACKSLASH@589 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@590 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_test.o `test -f 'vector/vector_test.c' || echo '$(srcdir)/'`vector/vector_test.c591 592 vector/vector_test-vector_test.obj: vector/vector_test.c593 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -MT vector/vector_test-vector_test.obj -MD -MP -MF vector/$(DEPDIR)/vector_test-vector_test.Tpo -c -o vector/vector_test-vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi`594 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vector/$(DEPDIR)/vector_test-vector_test.Tpo vector/$(DEPDIR)/vector_test-vector_test.Po595 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector/vector_test.c' object='vector/vector_test-vector_test.obj' libtool=no @AMDEPBACKSLASH@596 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@597 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vector_test_CFLAGS) $(CFLAGS) -c -o vector/vector_test-vector_test.obj `if test -f 'vector/vector_test.c'; then $(CYGPATH_W) 'vector/vector_test.c'; else $(CYGPATH_W) '$(srcdir)/vector/vector_test.c'; fi`598 524 599 525 ID: $(am__tagged_files) … … 711 637 -rm -f avltree/$(DEPDIR)/$(am__dirstamp) 712 638 -rm -f avltree/$(am__dirstamp) 713 -rm -f vector/$(DEPDIR)/$(am__dirstamp)714 -rm -f vector/$(am__dirstamp)715 639 716 640 maintainer-clean-generic: … … 722 646 723 647 distclean: distclean-am 724 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) vector/$(DEPDIR)648 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) 725 649 -rm -f Makefile 726 650 distclean-am: clean-am distclean-compile distclean-generic \ … … 768 692 769 693 maintainer-clean: maintainer-clean-am 770 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) vector/$(DEPDIR)694 -rm -rf ./$(DEPDIR) avltree/$(DEPDIR) 771 695 -rm -f Makefile 772 696 maintainer-clean-am: distclean-am maintainer-clean-generic -
src/tests/vector.c
r78754d7 r891c3e3 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // libcfa_vector.c --7 // vector.c -- 8 8 // 9 9 // Author : Thierry Delisle 10 10 // Created On : Mon Jul 4 23:36:19 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : T ue Jul 5 15:08:05 201613 // Update Count : 2 612 // Last Modified On : Thu Jan 18 17:08:08 2018 13 // Update Count : 27 14 14 // 15 15 … … 63 63 // Local Variables: // 64 64 // tab-width: 4 // 65 // compile-command: "cfa libcfa_vector.c" //65 // compile-command: "cfa vector.c" // 66 66 // End: // -
tools/repeat.c
r78754d7 r891c3e3 26 26 if(print_iterations) { 27 27 printf("\r%d / %d", i, repetitions); 28 fflush(stdout); 28 29 } 29 30 int retcode = run(); … … 47 48 fprintf(out, "Repeat CMD N times\n\n"); 48 49 fprintf(out, "\t-h,--help\tprint this usage message\n"); 49 fprintf(out, "\t-s\tstop on error\n"); 50 fprintf(out, "\t-i\toutput iterations instead of CMD stdout\n"); 51 fprintf(out, "\t-x\tprint CMD before running it\n"); 50 fprintf(out, "\t-s\t\tstop on error\n"); 51 fprintf(out, "\t-i\t\toutput iterations instead of CMD stdout\n"); 52 fprintf(out, "\t-x\t\tprint CMD before running it\n"); 53 fprintf(out, "\t-a FILE\t\tredirect output of command to append to FILE\n"); 54 fprintf(out, "\t-r FILE\t\tredirect output of command to FILE\n"); 52 55 exit(code); 53 56 } … … 55 58 char ** cmd_to_run = NULL; 56 59 bool print_cmd = false; 60 bool redirect = false; 61 bool redirect_append = false; 62 char * redirect_to = "/dev/null"; 57 63 pid_t child_pid = 0; 58 64 … … 73 79 74 80 int c; 75 while ( (c = getopt_long( argc, argv, " hsxi", long_opts, &long_index)) != -1 ) {81 while ( (c = getopt_long( argc, argv, "ahirsx", long_opts, &long_index)) != -1 ) { 76 82 switch ( c ) { 77 83 case Help: … … 87 93 case 'i': 88 94 print_iterations = true; 95 break; 96 case 'a': 97 if(redirect) { fprintf(stderr, "Cannot have -a and -r\n"); error(); } 98 redirect_append = true; 99 redirect_to = argv[optind]; 100 optind++; 101 break; 102 case 'r': 103 if(redirect_append) { fprintf(stderr, "Cannot have -a and -r\n"); error(); } 104 redirect = true; 105 redirect_to = argv[optind]; 106 optind++; 89 107 break; 90 108 default: … … 142 160 printf("\n"); 143 161 } 144 if(print_iterations ) {162 if(print_iterations || redirect || redirect_append) { 145 163 __attribute__((unused)) FILE * ignore = 146 freopen( "/dev/null", "w", stdout);164 freopen(redirect_to, redirect_append ? "a" : "w" , stdout); 147 165 } 148 166 execvp ( *cmd_to_run, cmd_to_run);
Note: See TracChangeset
for help on using the changeset viewer.